【问题标题】:Comparing 2 lists in .net for multiple matching elements Linq比较 .net 中的 2 个列表以查找多个匹配元素 Linq
【发布时间】:2018-09-17 23:15:01
【问题描述】:

如果我有 2 个列表,则在 .net 中

ListA 
{ID : 1, Value : "foo"}, 
{ID : 2, Value : "bar"}, 
{ID : 3, Value : "zoo"}

ListB 
{ID : 1, ListA_Id : 1, Value "bar"}, 
{ID : 2, ListA_Id : 3, Value "zoo"}, 
{ID : 3, ListA_Id : 4, Value "foo"}

如果我想在列表 B 中搜索其 ListA_Id 字段与列表 A 中的 ID 匹配的所有元素,我可以这样做:

ListB.Where(x => listA.ID.Contains(x.ListA_Id)).ToList()

但是如果我想确保 ListA 中的两个值都与 ListB 匹配呢?

例如ListA.Id == ListB.ListA_Id && ListA.Value = ListB.Value

ListA 中的第三个元素将匹配上例中 listB 中的第二个元素

【问题讨论】:

    标签: .net list entity-framework


    【解决方案1】:

    您可以使用Any 扩展方法并将您的条件指定为谓词:

    listB.Where(b => listA.Any(a => a.ID == b.ListA_Id && a.Value == b.Value)).ToList();
    

    这仅适用于列表包含少量元素的情况。随着列表变大,这将成倍地变慢,因为您最终可能会检查listA 的所有元素以查找listB 的每个元素。在这种情况下,可能值得将listA 转换为字典以便更快地查找:

    var dictA = listA.ToDictionary(a => a.ID);
    var result = listB
        .Where(b => dictA.TryGetValue(b.ListA_Id, out var a) && a.Value == b.Value))
        .ToList();
    

    【讨论】:

    • 太棒了。谢谢。
    猜你喜欢
    • 2019-10-17
    • 1970-01-01
    • 2016-05-25
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多