【问题标题】:Filter linq list on property value根据属性值过滤 linq 列表
【发布时间】:2008-09-01 11:49:07
【问题描述】:

我有一个List<int> 和一个List<customObject>。 customObject 类有一个 ID 属性。如何使用 LINQ 获取仅包含 ID 属性位于 List<int> 中的对象的 List<customObject>

编辑:我接受了 Konrads 的回答,因为它更容易/更直观地阅读。

【问题讨论】:

    标签: .net linq linq-to-objects


    【解决方案1】:
    var result = from o in objList where intList.Contains(o.ID) select o
    

    【讨论】:

    • Linq .Where 方法不是更简洁吗? (见下面我的回答)
    • @RobinWinslow 好吧,它们是完全等价的,我的只是使用查询表达式语法。我的可能更具可读性——但我承认(至少在大多数情况下)我实际上会使用你的变体,因为正如你所说,它更简洁。
    • 它们在技术上是等效的,但我发现.Where() 方法更易于阅读。当然,这只是我的意见。
    【解决方案2】:
    using System.Linq;
    
    objList.Where(x => intList.Contains(x.id));
    

    【讨论】:

      【解决方案3】:

      我刚才遇到了类似的问题并使用了以下解决方案。如果您已经有了对象列表,您可以删除所有在 int 列表中找不到的对象,只在 objList 中留下匹配项。

      objList.RemoveAll(x => !intList.Contains(x.id));
      

      【讨论】:

        【解决方案4】:

        未经测试,但会是这样的:

        var matches = from o in objList 
                          join i in intList on o.ID equals i
                          select o;
        

        @Konrad 刚刚对其进行了测试,它确实有效 - 我只是有一个错字,我写的是“i.ID”而不是“i”。

        【讨论】:

          【解决方案5】:

          只是为了完整性(也许它更容易阅读?),使用类似于 Matt 的“join”的“where”:

          var matches = from o in customObjectList
                        from i in intList
                        where o.ID == i
                        select o;
          

          【讨论】:

            【解决方案6】:

            请注意,当列表中的项目数超过 49 时,使用联接而不是包含不起作用!你会得到错误:Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-12-07
              • 1970-01-01
              • 2015-05-30
              • 2015-10-13
              • 2021-12-28
              • 1970-01-01
              相关资源
              最近更新 更多