1

我有两个要过滤的 KeyValue 对列表。

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

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

因此,如果我过滤上述两个键值对列表,我将得到以下信息:

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

这是否可能无需使用 foreach 循环并检查各个键值?

4

2 回答 2

3

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()
于 2013-10-03T12:07:33.270 回答
0

尝试这样的事情:

ListB.Where(kvpB => !ListA.Select(kvpA => kvpA.Value).Contains(kvpB.Value))
于 2013-10-03T12:11:12.993 回答