2014-11-14 3 views
-1

Может ли кто-нибудь помочь мне получить эти несколько строк кодов в формулировке linq? Не очень хорошо знаком с заявлением linq и был бы очень благодарен, если бы кто-нибудь мог мне помочь.C# Xamarin code to Linq statment

var searchFor = constraint.ToString(); 
for (int i = 0; i < allUserList.Count; i++) { 
    if (allUserList[i].FirstName.ToLower().Contains(searchFor) || 
     allUserList[i].LastName.ToLower().Contains(searchFor)) { 
     userInfoList.Add(allUserList[i]); 
    } 
} 

ответ

1

вы можете использовать AddRange:

userInfoList.AddRange(allUserList.Where(a => 
         a.FirstName.ToLower().Contains(searchfor) ||   
         a.LastName.ToLower().Contains(searchfor)); 

Where возвратит IEnumerable<UserObject> который AddRange можно использовать для заполнения userInfoList

+0

ToLower - это функция, поэтому вам нужны фигурные скобки – WebFreak001

+0

@ WebFreak001 righto – Jonesopolis

0

Это из памяти - никаких гарантий на точный синтаксис:

userInfoList = (from x in allUserList 
    where x.FirstName.ToLower().Contains(searchFor) || 
    x.LastName.ToLower().Contains(searchFor) select x).ToList(); 
+2

не забывайте, что он хочет добавлять элементы в этот список, а не заменять результаты запроса. – Robert

1

Во-первых, я бы рекомендовал вам переместить o ут в condition statement в отдельный метод, потому что это сделает код более читаемым при использовании Linq:

private bool UserNameContains(<your user name> user, string searchFor) 
{ 
    return user.FirstName.IndexOf(searchFor, StringComparision.OrdinalIgnoreCase) != -1 || 
      user.LastName.IndexOf(searchFor, StringComparision.OrdinalIgnoreCase) != -1; 
} 

Обратите внимание, что я использую IndexOf(...) != -1. Это связано с тем, что Contains использует тот же метод внутри, но с аргументом StringComparision.Ordinal. Предполагая, что вам не нужна обсадка, гораздо лучше использовать IndexOf(..., StringComparision.OrdinalIgnoreCase), таким образом вы избежите опускания символов строки и не сможете ввести ошибку в случае, если searchFor содержит верхний символ.

Тогда все, что вам нужно сделать, это:

userInfoList.AddRange(allUserList.Where(user => this.UserNameContains(user, searchFor)); 

или если userInfoList новый пустой список, вы можете переместить всю логику в его объявлении переменной:

var userInfoList = allUserList.Where(user => this.UserNameContains(user, searchFor).ToList(); 

Заметим, что вы должны добавить using System.Linq; с использованием директивы, чтобы иметь возможность использовать расширения Linq.