Запросить объект типа IList, используя элемент Any

Почему код ниже ничего не возвращает, когда я пытаюсь запросить IList тип объекта?

IList<Person> personRecord = new List<Person>
    {
        new Person{ Name = "Samuel"},
        new Person{ Name = "Kenny Sammy"},
        new Person{ Name = "Jame Sam Lee"}
    };

var names = from b in personRecord
            where personRecord.Any(d => d.Name == "Sam")
            select b;

return names.ToList();

3 ответа

Не использовать Any просто используйте условие в Where пункт вроде:

var names = from b in personRecord 
            where b.Name ==  "Sam"
            select b;

или с синтаксисом метода:

var names = personRecod.Where(b=> b.Name == "Sam");

Если вы ищете соответствие частичному содержанию, используйте Contains лайк:

var names = personRecod.Where(b=> b.Name.Contains("Sam"));

Чтобы сравнить частичное содержание с игнорированием использования случая IndexOf лайк:

var names = personRecod.Where(b=> b.Name.IndexOf("Same", StringComparison.InvariantCultureIgnoreCase) > -1);

.Any возвращает логическое значение true/false для того, удовлетворяет ли какой-либо элемент в этой коллекции вашему условию. Если вы изменили свой var names к типу, который вы ожидали получить (string) тогда вы получите сообщение об ошибке.

Как уже говорилось, вы ищете только .Where метод, или, возможно, .FirstOrDefault или же .First,

Если вы просто ищете третий элемент (поскольку он единственный, имя которого содержит полное слово "Сэм"), то:

var names = personRecord
    .Where(p => p.Name.Split(new char[] {' '}).Contains("Sam"));
Другие вопросы по тегам