C# 如何使用linq过滤两组键值对的差异?
我有两个要筛选的键值对列表 如果值与列表A中的键值不同,我想从列表B中检索键值对C# 如何使用linq过滤两组键值对的差异?,c#,linq,C#,Linq,我有两个要筛选的键值对列表 如果值与列表A中的键值不同,我想从列表B中检索键值对 List A List B <a,1> <b,4> <b,2> <c,5> <c,3> 列表A列表B 因此,如果我过滤上述两个键值对列表,我将得到以下结果: List c <b,4> <c,5> 列表c 不必使用foreach循环并检查单个键值,这是否可行?按键连接两个列表,然后选择具有不
List A List B
<a,1> <b,4>
<b,2> <c,5>
<c,3>
列表A列表B
因此,如果我过滤上述两个键值对列表,我将得到以下结果:
List c
<b,4>
<c,5>
列表c
不必使用foreach循环并检查单个键值,这是否可行?按键连接两个列表,然后选择具有不同值的项目:
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))
嗨,你能提供这个的lambda语法吗?@xerxes:你自己试过把它转换成lambda语法吗?当你陷入困境时,总是试着自己做事情并寻求帮助,而不仅仅是请求别人帮你做事情。@xerxes我不喜欢带有连接的lambda语法的样子,但肯定可以用lambdas完成。也同意Jon的观点,在提问之前,总是试着自己做一些事情,如果你想成为一名程序员对不起,我以前没有使用sugar语法,所以我真的不知道如何将其转换为lambda格式,但是感谢您提供的解决方案。@xerxes我建议您花一些时间研究sugar语法-它更易于使用和理解(因此是声明性的)。还有一个注意事项-您可以从列表中选择具有key和这两个值的匿名类型:
选择新的{key=kvpA.key,A=kvpA.Value,B=kvpB.Value}
可能会有用