2015-10-20 94 views
1

我想檢查用戶輸入的電子郵件是否已經存在於Office表中,看看我目前爲止所做的事情,問題是officeEmail總是如此,即使輸入電子郵件不存在,它永遠不會返回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; 
} 

回答

3

Where將不會返回null,但空序列,將其更改爲:

var officeEmail = data.Offices.FirstOrDefault(a => a.Active && a.Email.Equals(email)); 

if (officeEmail != null)     
    return true; 

FirstOrDefault將返回默認值(這裏是零)它不會找到查詢值。

它是使用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

爲什麼贊成'Any'超過'FirstOrDefault'。 +1 – HimBromBeere

+1

謝謝你的回答,也是非常好的解釋,因此我可以學到一些東西。 –

+0

@Mystia謝謝,很高興幫助:) – wudzik

2

Alternativly,如果你真的想使用.Where你也可以檢查返回集合包含的任何元素:

if (officeMail.Any()) // ... 

或者更短:

if (officeMail.Any(a => a.Active && a.Email.Equals(email))) // ... 

如果你想確保有恰好與您的條件匹配的列表中的一個項目使用.Single而不是.Any,如果找不到一個或多個項目,將會拋出異常。

您檢查所有返回true的實際原因是.Where將返回枚舉器,即使沒有項目與條件匹配。因此,結果永遠不會是null

相關問題