如何使用Entity Framework选择单个列?


70

有没有一种方法可以使用Entity Framework 4获取单个列的全部内容?像这样的SQL查询一样:

SELECT Name FROM MyTable WHERE UserId = 1;

Answers:


142

您可以使用LINQ.Select()来做到这一点。在您的情况下,它将类似于:

string Name = yourDbContext
  .MyTable
  .Where(u => u.UserId == 1)
  .Select(u => u.Name)
  .SingleOrDefault(); // This is what actually executes the request and return a response

如果您期望有多个条目作为响应,则可以改用.ToList()来执行请求。为了获得30岁以下所有人的名字,请执行以下操作:

string[] Names = yourDbContext
  .MyTable
  .Where(u => u.Age == 30)
  .Select(u => u.Name)
  .ToList();

21
@guitarlass如果您想从查询中获取单个结果,则需要执行以下操作:string s = db.Offices.Where(o => o.OfficeId == emp.OfficeId).Select(o => o.DepartmentId).FirstOrDefault()
Gary Chapman

6

我对Entity完全陌生,但是从理论上讲,这就是我要做的事情...

var name = yourDbContext.MyTable.Find(1).Name;

如果是主键。

- 要么 -

var name = yourDbContext.MyTable.SingleOrDefault(mytable => mytable.UserId == 1).Name;

- 要么 -

对于整个列:

var names = yourDbContext.MyTable
.Where(mytable => mytable.UserId == 1)
.Select(column => column.Name); //You can '.ToList();' this....

但是“哦,Geez Rick,我知道什么……”


查找的此答案不起作用。如果不选择,它将仍然从表中为单个实体获取所有列。检查我的答案以获取更多详细信息。
萨钦·帕萨尔

绝对正确,所有列都将被提取。它有效吗,答案是肯定的,是否有效,不是。
Jawid Hassim

4

使用LINQ,您的查询应如下所示:

public User GetUser(int userID){

return
(
 from p in "MyTable" //(Your Entity Model)
 where p.UserID == userID
 select p.Name
).SingleOrDefault();

}

当然,要做到这一点,您的解决方案中需要有一个ADO.Net实体模型。


2

您可以使用LINQselect子句并引用与“名称”列相关的属性。


0

如果仅要提取单个项目,则需要在FirstOrDefault()/ SingleOrDefault()之前使用select 。并且您可以使用所需属性的匿名对象。

var name = dbContext.MyTable.Select(x => new { x.UserId, x.Name }).FirstOrDefault(x => x.UserId == 1)?.Name;

上面的查询将被转换为此:

Select Top (1) UserId, Name from MyTable where UserId = 1;

对于多个项目,您可以简单地在位置之后链接选择:

var names = dbContext.MyTable.Where(x => x.UserId > 10).Select(x => x.Name);

如果需要多个属性,请在“内部”中使用匿名对象。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.