[英]Check if string already exist in Table
我想檢查用戶輸入的電子郵件是否已存在於Office表中,下面看一下我到目前為止所做的事情,問題是officeEmail
始終為true,即使輸入的電子郵件不存在也不會返回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;
}
Where
不會返回空值,而是空序列,將其更改為:
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
會更好。
或者,如果您真的想使用.Where
您還可以在其中檢查返回的集合是否包含ANY元素:
if (officeMail.Any()) // ...
甚至更短:
if (officeMail.Any(a => a.Active && a.Email.Equals(email))) // ...
如果要確保列表中完全有一項符合您的條件,請使用.Single
而不是.Any
,如果沒有一項或多項則將引發異常。
您的支票始終返回true
的實際原因是.Where
即使沒有項目與條件匹配, .Where
也會返回枚舉數。 因此,結果永遠不會為null
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.