Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 用于嵌套的每个_Linq - Fatal编程技术网

Linq 用于嵌套的每个

Linq 用于嵌套的每个,linq,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.Inn

你能给我一个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;

}
私有列表转换方法(列表1、列表2)
{
foreach(列表1中的var Firstitem)
{
foreach(列表2中的第二项)
{
if(Firstitem.InnerText.Trim()==Seconditem.InnerText.Trim())
{
第二项A=第一项A;
第二项B=第一项B;
Seconditem.C=Firstitem.C;
第二项D=第一项D;
Seconditem.E=Firstitem.E;
Seconditem.F=Firstitem.F;
}
}
}
返回列表2;
}

您的任务是分配值,因此修改对象。这不是LINQ的目的,LINQ的目的是查询数据源。因此,您可以使用LINQ构建一个查询,返回所有需要更新的项。然后,您可以使用
foreach
分配值(就像您所做的那样):


如果您考虑一下这段代码应该做什么,它会有所帮助—使用第一个列表中匹配记录的值更新第二个列表中的记录

有多种方法可以做到这一点。一个选项是将每个
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);

代码的其余部分保持不变

您试过什么了吗?我们不是一个代码编写服务。你到底为什么“需要Linq”?代码片段是否按预期工作?对于对这个问题投赞成票的人,你能解释一下为什么你认为这很有用并显示了研究成果吗?LINQ是一种函数查询语言,它的目的是查询数据,而不是产生副作用。您想要更改
List2
的内容,这不是linq的用途。
var matches = from Firstitem in List1
              join Seconditem in List2
              on  Firstitem.InnerText.Trim() equals Seconditem.InnerText.Trim()
              select (Firstitem,Seconditem);