C# 如何使用实体框架选择单个列?

C# 如何使用实体框架选择单个列?,c#,entity-framework,C#,Entity Framework,有没有一种方法可以使用EntityFramework4获取单个列的全部内容?与此SQL查询相同: SELECT Name FROM MyTable WHERE UserId = 1; 您可以使用LINQ select子句并引用与您的名称列相关的属性。您可以使用LINQ来完成此操作。在您的情况下,会出现如下情况: string Name = yourDbContext .MyTable .Where(u => u.UserId == 1) .Select(u => u.N

有没有一种方法可以使用EntityFramework4获取单个列的全部内容?与此SQL查询相同:

SELECT Name FROM MyTable WHERE UserId = 1;
您可以使用LINQ select子句并引用与您的名称列相关的属性。

您可以使用LINQ来完成此操作。在您的情况下,会出现如下情况:

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();

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

public User GetUser(int userID){

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

}

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

我完全不懂实体,但理论上我会这么做

var name = yourDbContext.MyTable.Find(1).Name;
如果它是主键

-或-

var name = yourDbContext.MyTable.SingleOrDefault(mytable => mytable.UserId == 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....

但是哦,天哪,瑞克,我知道什么…

如果你只提取一个项目,你需要在第一个默认值之前使用select/SingleOrDefault。并且可以使用所需属性的匿名对象

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);

如果需要多个属性,请在Select中使用匿名对象。

@guitarlass如果希望从查询中获得单个结果,则需要执行以下操作:string s=db.Offices.Whereo=>o.OfficeId==emp.OfficeId.Selecto=>o.DepartmentId.firstOrdefault查找的答案无效。如果没有select,它仍然从表中获取单个实体的所有列。查看我的答案了解更多详细信息。您完全正确,所有列都将被提取。它有效吗?答案是肯定的,有效吗。
var name = dbContext.MyTable.Select(x => new { x.UserId, x.Name }).FirstOrDefault(x => x.UserId == 1)?.Name;