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

时间:2012-01-29 16:13:59

标签: c# entity-framework

有没有办法使用Entity Framework 4获取单个列的全部内容?像这个SQL Query一样:

SELECT Name FROM MyTable WHERE UserId = 1;

5 个答案:

答案 0 :(得分:109)

你可以使用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();

答案 1 :(得分:5)

我是实体上的一个完整的菜鸟,但这就是我理论上会这样做的方式......

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,我知道什么......”

答案 2 :(得分: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实体模型。

答案 3 :(得分:2)

您可以使用LINQ select子句并引用与您的Name列相关的属性。

答案 4 :(得分: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);

在内部使用匿名对象选择是否需要多个属性。