我有两个清单。每个列表都有一个Name
对象和一个Value
对象。我想循环遍历list1
并检查每个list1 Name
对象是否与list2 Name
对象相同(下面的linq代码执行此操作)。
如果匹配,那么我希望List1 Value
设置为list2 Value
如何做到这一点?
list1 list2
Name Value Name Value
john apple John orange
peter null Peter grape
我需要它看起来像这样:
list1 list2
Name Value Name Value
john orange john orange
peter grape peter grape
Linq代码:
var x = list1.Where(n => list2.Select(n1 => n1.Name).Contains(n.Name));
答案 0 :(得分:2)
对于过滤,您可以使用LINQ
,使用循环设置值:
var commonItems = from x in list1
join y in list2
on x.Name equals y.Name
select new { Item = x, NewValue = y.Value };
foreach(var x in commonItems)
{
x.Item.Value = x.NewValue;
}
答案 1 :(得分:1)
在一个结果中,您可以将对象连接在一起:
var output= from l1 in list1
join l2 in list2
on l1.Name equals l2.Name
select new { List1 = l1, List2 = l2};
然后操纵返回结果上的对象。通过循环遍历每个并设置:
foreach (var result in output)
result.List1.Value = result.List2.Value;
答案 2 :(得分:0)
您正在寻找左连接
var x = from l1 in list1
join l2 in list2 on l1.Name equals l2.Name into l3
from l2 in l3.DefaultIfEmpty()
select new { Name = l1.Name, Value = (l2 == null ? l1.Value : l2.Value) };