当我尝试查询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();
不要使用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
。
如果您只是在寻找第三个项目(因为它是唯一一个名称包含完整单词'Sam'的项目),那么:
var names = personRecord
.Where(p => p.Name.Split(new char[] {' '}).Contains("Sam"));