LINQ为每个嵌套

时间:2017-08-31 09:28:59

标签: linq

请你给我一个解决方案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;

}

2 个答案:

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

其余代码保持不变