2016-04-20 3 views
0

Я пытаюсь отфильтровать список пользователей на основе фамилии и использования Linq. Я проработал несколько часов и просмотрел несколько сообщений, которые, похоже, не помогают, надеясь, что кто-то поможет мне понять, почему он не возвращает никаких результатов.Список фильтров с объектом Linq и содержит

У меня есть объект Пользователи, которые имеют несколько свойств (FirstName, Surname ect ..), хранящихся в списке. После этого у меня есть отфильтрованный список, который заполнен оператором Linq,

List<User> FilteredUsers = new List<User>(); 
FilteredUsers.AddRange(AllUsers.Where(i => i.Surname.Contains("jones"))); 

Это не возвращает никаких результатов. Я также попытался

List<User> FilteredUsers = new List<User>(); 
FilteredUsers.AddRange(AllUsers.FindAll(i => i.Surname.Contains("jones"))); 
+0

Ваш пользователь. Приведите примеры людей, где его не работает. – BugFinder

+3

Вы уверены, что пользователь с «jones» в «Surnace» на самом деле существует, и это не «Джонс»? – haim770

+0

Как сказал @ haim770 - возможно, это проблема чувствительности к регистру. – rinukkusu

ответ

0

Как указано haim770 это было вопрос чувствительность вопрос! Такая простая ошибка! Спасибо.

1

В случае, если вы хотите регистрозависимости фильтрации (например, "Jones", "jOnes" должны совпадать)

List<User> FilteredUsers = AllUsers 
    .Where(user => 
     user.Surname.IndexOf("jones", StringComparison.OrdinalIgnoreCase) >= 0)) 
    .ToList(); 
0

Вот мой рабочий код (добавление прецедентное нечувствительность), я не посмотрите, в чем проблема. Нужны ли все необходимые инструкции using, правильно ли инициализирован список (распечатать содержимое для отладки)?

using System; 
using System.Linq; 
using System.Collections.Generic; 

public class User { 
    public String Surname {get;set;} 
} 

static class Prog { 
    static void Main() { 
     List<User> AllUsers = new List<User>(); 
     AllUsers.Add(new User(){Surname="jones"}); 
     AllUsers.Add(new User(){Surname="meyer"}); 
     AllUsers.Add(new User(){Surname="blackjones"}); 
     AllUsers.Add(new User(){Surname="Jones"}); 
     AllUsers.Add(new User(){Surname="Jonesmith"}); 
     AllUsers.Add(new User(){Surname="ajonesee"}); 

     List<User> FilteredUsers = new List<User>(); 
     FilteredUsers.AddRange(AllUsers.Where(i => i.Surname.ToLower().Contains("jones"))); 
     foreach (User u in FilteredUsers) { 
      Console.WriteLine(u.Surname); 
     } 
    } 
} 

Выход:

jones 
blackjones 
Jones 
Jonesmith 
ajonesee 

Но мне интересно, почему вы сначала создать пустой FilteredUsers список, а затем добавить результат вместо назначения непосредственно:

List<User> FilteredUsers = AllUsers.Where(i => i.Surname.ToLower().Contains("jones")); 
Смежные вопросы