【问题标题】: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

        【讨论】:

          猜你喜欢
          • 2012-08-27
          • 1970-01-01
          • 1970-01-01
          • 2017-08-27
          • 2020-03-21
          • 2018-11-22
          • 1970-01-01
          • 2019-10-04
          • 1970-01-01
          相关资源
          最近更新 更多