使用Any元素

时间:2015-06-09 16:00:39

标签: c# ilist any tolist

为什么当我尝试查询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 个答案:

答案 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"));