为什么Select返回一个布尔值?

时间:2014-02-19 21:16:22

标签: c# linq asp.net-mvc-5 entity-framework-6

我正在使用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对象。为什么不是这种情况?

由于

4 个答案:

答案 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从字面上选择参数中的内容。因此,如果您的表达式返回boolSelect将返回bool