如何比较两个列表与多个对象和设置值?

时间:2014-08-27 16:26:25

标签: c# linq list

我有两个清单。每个列表都有一个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));

3 个答案:

答案 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) };