C# 如何比较具有多个对象的两个列表并设置值?
我有两张单子。每个列表都有一个C# 如何比较具有多个对象的两个列表并设置值?,c#,linq,list,C#,Linq,List,我有两张单子。每个列表都有一个名称对象和一个值对象。我想循环查看list1并检查每个list1 Name对象是否与list2name对象相同(下面的linq代码就是这样做的) 如果它们匹配,那么我希望将List1值设置为list2值如何实现 list1 list2 Name Value Name Value john apple John orange peter null Peter grape 我需要
名称
对象和一个值
对象。我想循环查看list1
并检查每个list1 Name
对象是否与list2name
对象相同(下面的linq代码就是这样做的)
如果它们匹配,那么我希望将List1值
设置为list2值
如何实现
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));
在一个结果中,可以将对象连接在一起:
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;
对于过滤,您可以使用
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;
}
您正在寻找左连接
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) };
选择{Item=x,NewValue=y.Value}代码>行不工作x
和y
找不到您在选择@BenScotch之后缺少new
:您可以从列表1中的x向linq查询的第一部分添加where
子句。其中(item=>regex.IsMatch(item.Value))在列表2中加入y…
您只需在查询之前设置正则表达式,并在最后运行foreach(在这个答案中已经是这样了)。(我知道你现在已经删除了问题的正则表达式部分以及此答案中的注释,但如果你仍然觉得有用,我会留下此注释)。@JasonDown我在这里重新编写了问题:正则表达式匹配要求消失了?@IgorPashchuk:他在没有人回答后删除了它。我在被接受的答案上添加了一条评论,就在他删除它之前,但我认为我太晚了,他没有注意到。@IgorPashchuk我删除了它,因为我需要改写这个问题。我可以在几分钟内把它放回去minutes@IgorPashchuk我将问题重新改写如下: