我有以下查询。如果行不存在但我总是有一个值,我希望var为null
。我做错了什么。
var results = dbContext.Users.Where(m => UserName == userName && Password == password).First();
if (results !=null)
return true;
答案 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;