【问题标题】:query an IList type object using Any element使用 Any 元素查询 IList 类型对象
【发布时间】:2015-06-09 16:00:39
【问题描述】:

为什么当我尝试查询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();

【问题讨论】:

  • 可能是因为没有PersonName 属性等于“Sam”

标签: c# linq


【解决方案1】:

不要使用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);

【讨论】:

    【解决方案2】:

    .Any 返回一个布尔值,true/false,判断该集合中的任何项目是否满足您的条件。如果您将 var names 更改为您希望收到的类型 (string),那么您会收到一个突出显示此内容的错误。

    如前所述,您正在寻找的只是.Where 方法,或者可能是.FirstOrDefault.First

    【讨论】:

      【解决方案3】:

      如果您只是在寻找第三个项目(因为它是唯一一个名称包含完整单词“Sam”的项目),那么:

      var names = personRecord
          .Where(p => p.Name.Split(new char[] {' '}).Contains("Sam"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 2011-11-09
        • 1970-01-01
        相关资源
        最近更新 更多