为什么当我尝试查询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();
答案 0 :(得分:6)
不要使用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);
答案 1 :(得分:0)
.Any
返回一个布尔值,true / false,表示该集合中的任何项是否满足您的条件。如果您将var names
更改为您希望收到的类型(string
),则会收到突出显示此错误的错误。
如前所述,您所寻找的只是.Where
方法,或者可能是.FirstOrDefault
或.First
。
答案 2 :(得分:0)
如果你只是在寻找第三个项目(因为它是唯一一个名字中包含完整单词&#39; Sam&#39;),那么:
var names = personRecord
.Where(p => p.Name.Split(new char[] {' '}).Contains("Sam"));