当没有行存在时,实体框架返回非null

时间:2015-04-13 14:28:22

标签: c# entity-framework

我有以下查询。如果行不存在但我总是有一个值,我希望var为null。我做错了什么。

var results = dbContext.Users.Where(m => UserName == userName && Password == password).First();

if (results !=null)
     return true;

4 个答案:

答案 0 :(得分:2)

我很惊讶你看到一个值,如果你期望Where的结果不返回任何结果,因为First()会在空集合上抛出异常。您可以一起删除Where方法,并将谓词放在FirstOrDefault中,使其更清晰,如下所示:

var results = dbContext.Users.FirstOrDefault(m => UserName == userName && Password == password);

答案 1 :(得分:1)

您应该像这样编辑代码:

var results = dbContext.Users.Where(m => m.UserName == userName && m.Password == password).FirstOrDefault();

<强>解释 由于差异看起来可能看不到差异,因此查询的问题是根本不使用“m”,只要至少有一个用户,结果变量就不会为空。这也是为什么.First()在没有匹配时不抛出异常的原因。这显然期望有变量UserName和userName具有相同的值(并且密码相同)但我不认为还有另一种可构建的可能解释。

答案 2 :(得分:1)

FirstOrDefault功能是您正在寻找的功能。如果有一个或多个结果,它将返回该结果。如果没有结果,它将返回默认值(在User对象的情况下,该值为null)

var results = dbContext.Users.Where(m => UserName == userName && Password == password)
                             .FirstOrDefault();

答案 3 :(得分:0)

如果该行不存在,请使用FirstOrDefault()返回null

  var results = dbContext.Users.Where(m => m.UserName == userName && m.Password == password)
                                        .FirstOrDefault();

    if (results !=null)
         return true;