我正在使用MVC 5中的Entity Framework 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方法中获得一个bool?
我的期望是获得一个ApplicationUser
对象。为什么不是这种情况?
由于
答案 0 :(得分:7)
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()
的{{3}}重载将过滤谓词作为第二个参数。
答案 1 :(得分:1)
你的选择是返回一个比较结果的对象。
更改为:
var user = context.Users.FirstOrDefault(x => x.UserName == applicationUser.UserName);
答案 2 :(得分:1)
这是因为你正在选择一个布尔值。
由于没有指定要求,我猜测你的尝试代码的要求。
使用以下行。
var user=context.Users.Where(user=>user.UserName==applicationUser.UserName).FirstOrDefault();
答案 3 :(得分:1)
Select
从字面上选择参数中的内容。因此,如果您的表达式返回bool
,Select
将返回bool
。