2014-11-03 5 views
0

У меня есть код в методе MVC POST. Я просто пытаюсь сравнить имя пользователя, возвращенное в ViewModel, в коллекцию EF, возвращаемую из базы данных. В принципе, я хочу получить логический результат. Я попытался использовать Find, но он не позволяет мне указать Lambda. Я попытался использовать Where, но он возвращает список и не позволит мне использовать FirstOrDefault. Могу ли я помочь?LINQ: Trouble Using Find или Where in database list

[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

+0

@ user2471435, добро пожаловать – Habib