检查表中是否已存在字符串

时间:2015-10-20 08:26:46

标签: c# linq

我想检查用户输入的电子邮件是否已经存在于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;
}

2 个答案:

答案 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