我想检查用户输入的电子邮件是否已经存在于Office表中,看看我到目前为止所做的事情,问题是officeEmail
始终为真,即使输入的电子邮件没有&# 39;存在它永远不会返回NULL
。
public static bool IsOfficeEmail(string email)
{
using (var data = Database)
{
data.ObjectTrackingEnabled = false;
var officeEmail = data.Offices.Where(a => a.Active && a.Email.Equals(email));
if (officeEmail != null)
return true;
}
return false;
}
答案 0 :(得分:3)
Where
不会返回null,而是返回空序列,将其更改为:
var officeEmail = data.Offices.FirstOrDefault(a => a.Active && a.Email.Equals(email));
if (officeEmail != null)
return true;
FirstOrDefault
将返回默认值(此处为null),它将找不到查询的值。
如果您对电子邮件记录不感兴趣,可以使用Any
:
public static bool IsOfficeEmail(string email)
{
using (var data = Database)
{
return data.Offices.Any(a => a.Active && a.Email.Equals(email))
}
}
如果您不使用它,您将无法收到电子邮件记录。您应该使用哪种方法取决于您对officeEmail
的处理方式,如果您只是查询它是否存在 - > Any
将是最好的方法。如果您想检查现有记录并对其执行某些操作,FirstOrDefault
会更好。
答案 1 :(得分:2)
另外,如果您真的想使用.Where
,还可以检查返回的集合是否包含任何元素:
if (officeMail.Any()) // ...
甚至更短:
if (officeMail.Any(a => a.Active && a.Email.Equals(email))) // ...
如果您想确保列表中只有一个项目符合您的条件,请使用.Single
代替.Any
,如果找不到或超过一个项目,则会引发异常。
检查总是返回true
的实际原因是即使没有项目符合条件,.Where
也会返回枚举器。因此,结果永远不会null
。