【问题标题】:Linq select where entity property value matches value of property of any item in another ListLinq 选择实体属性值与另一个列表中任何项目的属性值匹配的位置
【发布时间】:2021-10-29 05:12:02
【问题描述】:

在 C# 中使用 Linq,我如何从一个实体类型的对象列表中选择项目,其中任何对象的属性值与包含对象的列表中的任何对象的属性值匹配不同的实体类型?我正在寻找一个使用流利语法的真实表达式,它执行以下伪代码的功能(实体 A 和实体 B 不通过键链接)

MyContext.ListOfEntityA.Where(a => ListOfEntityB.Contains(ListOfEntityB.Property.Value == a.Value))

澄清一下,如果集合包含如下所示的对象:

ListOfEntityA
-------------
EntityA_Object.Property = 1
EntityA_Object.Property = 2

ListOfEntityB
-------------
EntityB_Object.Property = 2

那么表达式应该返回 ListOfEntityA 中的第二项

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    试试这个,它现在可以工作了。

    MyContext.ListOfEntityA.Where(a => ListOfEntityB.Exists(b => b.Property.Value == a.Property.Value));
    

    【讨论】:

      【解决方案2】:

      您可以使用 LINQ 连接表达式在匹配属性上连接两个列表,过滤掉所有没有匹配结果的元素。结果应该是两个列表中的匹配元素作为 IEnumerable 结果。

      ListOfEntityA
      .Join(ListOfEntityB, l => l.Property, r => r.Property, (a, b) => new { EntityAObject = a, EntityBObject = b });
      

      【讨论】:

        【解决方案3】:
        ListOfEntityA.Where(a => ListOfEntityB.Any(b => b.Property == a.Property))
        
        

        Any 检查是否与ListOfEntityB 中的项目匹配,Where 返回找到匹配的ListOfEntityA 中的对象。现场观看:

        https://dotnetfiddle.net/rbOJg5

        【讨论】:

        • 谢谢@Reza,但它返回一个布尔值来表示是否匹配,我想返回匹配的对象
        • Any 检查是否存在匹配项,但Where 返回找到匹配项的ListOfEntityA 中的对象。看直播:dotnetfiddle.net/rbOJg5
        • 请将附加信息和进一步的解释整合到你的答案中,这样答案就不仅仅是一段无法解释的代码。
        猜你喜欢
        • 1970-01-01
        • 2021-05-30
        • 1970-01-01
        • 2011-12-13
        • 2016-06-03
        • 1970-01-01
        • 2017-01-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多