我有两个KeyValue对列表,我想过滤它们。
如果值与列表A中的键值不同,我想从列表B中检索键值对。
List A List B
<a,1> <b,4>
<b,2> <c,5>
<c,3>
所以,如果我过滤上面两个键值对列表,我会得到以下内容:
List c
<b,4>
<c,5>
这是可能的,而不必使用foreach循环并检查单个键值吗?
答案 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))