2011-04-06 91 views
2

我寫了一些LINQ,我在數據庫中檢查用戶名是否是唯一的,當我添加一個新用戶時。我的代碼(見下文)有效,但有沒有更好的方法來做到這一點?如果用戶名不存在,我目前依靠捕獲錯誤。LINQ和唯一ID

try 
     { 
      var User = (from u in _database.Users 
         where u.UserID == strUserName 
         select u).First(); 

      if (User != null) 
      { 
       blnUnique = false; 
      } 
     } 
     catch 
     { 
      blnUnique = false; 
     } 

回答

3

可以使用Enumerable.Any<TSource>()擴展方法:

bool isUnique = (from u in database.Users 
       where u.UserID == userName 
       select u).Any(); 

這裏是表達這種使用lambda的另一種方式:

bool isUnique = database.Users.Any(u => u.UserID == userName); 

注意,equals operator on the String class將作出區分大小寫的序號比較。如果你希望做一個區分大小寫的比較,你將不得不使用的方法String.Equals

bool isUnique = database.Users.Any(
    u => u.UserID.Equals(userName, StringComparison.OrdinalIgnoreCase)); 
+0

謝謝...「任意」看起來是什麼,我一直在尋找,因爲它返回一個true或不同FirstOrDefault假 – user517406 2011-04-06 11:55:58

1

使用FirstOrDefault(),而不是首先()

0

是_database的倉庫?如果是的話,我會建議在內部實現一個字典,所以你可以暴露

FindUser(userID) 

方法,如果用戶ID未找到其返回null。你的循環不能很好地擴展。