Запросить объект типа 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"));