2014-11-03 30 views
0

我在MVC POST方法中有一些代碼。我試圖簡單地將ViewModel中返回的用戶名與數據庫返回的EF集合進行比較。基本上我想要一個布爾結果。我嘗試使用查找,但它不讓我指定一個Lambda。我嘗試使用Where,但它返回一個列表,不會讓我使用FirstOrDefault。我能得到一些幫助嗎?LINQ:使用查找或在數據庫列表上的位置

[HttpPost] 
     public ActionResult Login(LoginModel loginModel) 
     { 
      try 
      { 
       using (PrefCenterEntities db = new PrefCenterEntities()) 
       { 
        var userName = loginModel.UserName; 
        var passWord = loginModel.Password; 

        User pcUser = new User 
        { 
         UserName = userName, 
         Password = passWord 
        }; 

        // Find if already exists 
        if (db.Users.Where(y => System.String.Compare(y.UserName, loginModel.UserName, System.StringComparison.OrdinalIgnoreCase) == 0).FirstOrDefault()) 



       } 

回答

4

我試着用在哪裏,但它返回一個列表,不會讓我用 FirstOrDefault。

您需要Enumerable.Any,如:

if (db.Users.Any(y => System.String.Compare(y.UserName, loginModel.UserName, System.StringComparison.OrdinalIgnoreCase) == 0)) 

如果你要使用FirstOrDefault然後對null像比較:

if (db.Users.Where(y => System.String.Compare(y.UserName, loginModel.UserName, System.StringComparison.OrdinalIgnoreCase) == 0).FirstOrDefault() != null) 

或者

if (db.Users.FirstOrDefault(y => System.String.Compare(y.UserName, loginModel.UserName, System.StringComparison.OrdinalIgnoreCase) == 0) != null) 

它APPE ars,你試圖做大小寫不敏感的比較,你有兩個選擇。使用string.Equals這需要一個參數指定喜歡不敏感的情況相比:

if (db.Users.Any(y => System.String.Equals(y.UserName, loginModel.UserName, System.StringComparison.OrdinalIgnoreCase))) 

或者,如果有一個問題轉換String.Equals臥數據源語言下,然後將您的兩個值轉換爲大寫然後進行比較,如:

if (db.Users.Any(y => y.UserName != null && loginModel.UserName != null && 
        y.UserName.ToUpper() == loginModel.UserName.ToUpper())) 
{ 
    //record exits. 
} 
+1

謝謝!這樣可行。 – user2471435 2014-11-03 15:23:17

+0

@ user2471435,不客氣 – Habib 2014-11-03 15:38:45

相關問題