我有两个要过滤的 KeyValue 对列表。
如果值与列表 A 中的键值不同,我想从列表 B 中检索键值对。
List A List B
<a,1> <b,4>
<b,2> <c,5>
<c,3>
因此,如果我过滤上述两个键值对列表,我将得到以下信息:
List c
<b,4>
<c,5>
这是否可能无需使用 foreach 循环并检查各个键值?
Join both lists by keys, then select those items, which have different values:
from kvpA in listA
join kvpB in listB on kvpA.Key equals kvpB.Key
where kvpA.Value != kvpB.Value
select kvpB
Lambda syntax:
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))