如何使用linq过滤两组键值对?

时间:2013-10-03 12:03:52

标签: c# linq

我有两个KeyValue对列表,我想过滤它们。

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

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

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

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

这是可能的,而不必使用foreach循环并检查单个键值吗?

2 个答案:

答案 0 :(得分:3)

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

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()

答案 1 :(得分:0)

尝试这样的事情:

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