如何使用 LINQ 筛选两组键值对的差异

本文关键字:键值对 两组 LINQ 何使用 筛选 | 更新日期: 2023-09-27 18:33:56

>我有两个键值对列表,我想过滤一下。

如果值与列表 A 中的键值不同,我想从列表 B 中检索键值对。

List A      List B 
<a,1>       <b,4>
<b,2>       <c,5>
<c,3>

因此,如果我过滤上述两个键值对列表,我会得到以下内容:

List c
<b,4>
<c,5>

是否可以在不必使用 foreach 循环并检查单个键值的情况下做到这一点?

如何使用 LINQ 筛选两组键值对的差异

按键联接两个列表,然后选择具有不同值的项目:

from kvpA in listA
join kvpB in listB on kvpA.Key equals kvpB.Key
where kvpA.Value != kvpB.Value
select kvpB

Lambda 语法:

listA.Join(listB, 
           kvpA => kvpA.Key, 
           kvpB => kvpB.Key, 
           (kvpA, kvpB) => new { kvpA, kvpB })
     .Where(x => x.kvpA.Value != x.kvpB.Value)
     .Select(x => x.kvpB)
     .ToList()

尝试这样的事情:

ListB.Where(kvpB => !ListA.Select(kvpA => kvpA.Value).Contains(kvpB.Value))