【问题标题】:How can you filter list by property value in an int list?如何在 int 列表中按属性值过滤列表?
【发布时间】:2017-07-02 17:36:38
【问题描述】:

我已经定义了两个列表,现在想通过匹配filterRIDS RID 值的Application 属性过滤escHistory 列表。

但是通过过滤掉escHistory 的LINQ,我得到的返回计数为零。尽管该列表确实包含应用程序属性值与filterRIDS 中定义的值匹配的记录。

问题:

如何在另一个列表中按属性值过滤列表?

这是过滤器代码的基本要点:

List<int> filterRIDS = new List<int> { 115841, 200463 };
List<Escalation> escHistory = new List<Escalation>();

//Filter list by RID's matching
escHistory = escHistory.Where(r => r.Application.Contains(filterRIDS.ToString())).ToList<Escalation>();

【问题讨论】:

    标签: c# linq list contains


    【解决方案1】:

    问题是filterRIDS.ToString(),它返回List&lt;int&gt;类的名称:

    "System.Collections.Generic.List`1[System.Int32]"
    

    当然,Application 字段中没有包含此值的历史记录对象。如果要检查Application 字符串是否包含给定列表中的任何字符串:

    escHistory = escHistory
         .Where(r => filterRIDS.Any(id => r.Application.Contains(id.ToString())))
         .ToList();
    

    【讨论】:

      【解决方案2】:

      你交换了查询

      escHistory = escHistory.Where(r => filterRIDS.Contains(int.Parse(r.Application))).ToList();
      

      【讨论】:

      • 好吧,忘了提到r.Application 是一个字符串类型,如123456 MyTestApp。所以在我的情况下,我会在解析为 int 之前得到子字符串。 escHistory = escHistory.Where(r =&gt; filterRIDS.Contains(int.Parse(r.Application.Substring(0, 6)))).ToList();
      • @BrianJ 或者你拆分 r.Application.Split(' ').First()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 2020-07-01
      相关资源
      最近更新 更多