【问题标题】:Why does Select return a boolean?为什么 Select 返回一个布尔值?
【发布时间】:2014-03-20 11:56:47
【问题描述】:
我正在使用 MVC 5 中的实体框架 6。
我有以下方法:
[HttpPost]
public ActionResult UpdateDetails(ApplicationUser applicationUser)
{
var context = new ApplicationDbContext();
var user = context.Users.Select(x => x.UserName == applicationUser.UserName).FirstOrDefault();
//etc etc
}
用户是IDbSet<ApplicationUser>。
为什么我会从 Select 方法返回一个布尔值?
我的期望是找回一个ApplicationUser 对象。为什么不是这样?
谢谢
【问题讨论】:
标签:
c#
linq
asp.net-mvc-5
entity-framework-6
【解决方案1】:
Select() 投影一个序列的元素。由于x.UserName == applicationUser.UserName 返回一个bool,所以该方法的结果将是一个布尔值。
你想要的需要Where 方法。这会根据指定的谓词过滤序列:
var user = context.Users.Where(x => x.UserName == applicationUser.UserName).FirstOrDefault();
可以简写为:
var user = context.Users.FirstOrDefault(x => x.UserName == applicationUser.UserName);
这是可能的,因为FirstOrDefault() 的this 重载将过滤谓词作为第二个参数。
【解决方案2】:
您的选择正在返回一个作为比较结果的对象。
改为:
var user = context.Users.FirstOrDefault(x => x.UserName == applicationUser.UserName);
【解决方案3】:
这是因为您正在选择一个布尔值。
由于没有指定要求,我从您尝试的代码中猜测您的要求。
使用下面的行。
var user=context.Users.Where(user=>user.UserName==applicationUser.UserName).FirstOrDefault();
【解决方案4】:
Select 从字面上选择参数中的某些内容。因此,如果您有一个返回 bool 的表达式,Select 将返回 bool。