使用Any元素查询illist类型对象



当我尝试查询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"));

最新更新