请你给我一个解决方案Linq?
我需要Linq以下方法:
private List<Model> ConvertMethod(List<Model> List1, List<Model> List2)
{
foreach (var Firstitem in List1)
{
foreach (var Seconditem in List2)
{
if (Firstitem.InnerText.Trim() == Seconditem.InnerText.Trim())
{
Seconditem.A= Firstitem.A;
Seconditem.B= Firstitem.B;
Seconditem.C= Firstitem.C;
Seconditem.D= Firstitem.D;
Seconditem.E= Firstitem.E;
Seconditem.F= Firstitem.F;
}
}
}
return List2;
}
答案 0 :(得分:1)
您的任务是分配值,因此修改对象。这不是LINQ的目的,即查询数据源。因此,您可以使用LINQ构建一个返回所有需要更新的项的查询。然后,您可以使用foreach
分配值(就像您一样):
var sameItems = from l1 in List1 join l2 in List2
on l1.InnerText.Trim() equals l2.InnerText.Trim()
select new { l1, l2 };
foreach(var itemsToUpdate in sameItems)
{
itemsToUpdate.l2.A = itemsToUpdate.l1.A;
// ...
}
答案 1 :(得分:-1)
如果你考虑一下这段代码应该做什么,它会有所帮助 - 用第一个列表中匹配记录的值更新第二个列表中的记录。
您可以通过多种方式实现这一目标。一种选择是将每个foreach
替换为from
并过滤行:
var matches = from var Firstitem in List1
from var Seconditem in List2
where Firstitem.InnerText.Trim() == Seconditem.InnerText.Trim()
select (Firstitem,Seconditem);
foreach(var (Firstitem,Seconditem) in matches)
{
Seconditem.A= Firstitem.A;
Seconditem.B= Firstitem.B;
Seconditem.C= Firstitem.C;
Seconditem.D= Firstitem.D;
Seconditem.E= Firstitem.E;
Seconditem.F= Firstitem.F;
}
我在这里“作弊”,使用元组和分解来降低噪音
另一种选择是使用join
。在这种情况下,两个选项是相同的:
var matches = from Firstitem in List1
join Seconditem in List2
on Firstitem.InnerText.Trim() equals Seconditem.InnerText.Trim()
select (Firstitem,Seconditem);
其余代码保持不变