Linq用另一个集合中的值更新集合?

Hca*_*tek 17 c# linq collections

我有IQueryable<someClass>baseList

List<someOtherClass>someData

我想要做的是更新baseList中的一些项目中的属性.

对于someData中的每个项目,我想在baselist中找到相应的项目并更新项目的属性.

someOtherClass.someCode == baseList.myCode

我可以使用Linq进行某种类型的连接并设置baseList.someData + = someOtherClass.DataIWantToConcantenate.

我可以通过迭代来做到这一点,但有一种花哨的Linq方式,我可以在几行代码中做到这一点吗?

感谢任何提示,〜在圣地亚哥

dah*_*byk 18

要在两个列表中配对元素,可以使用LINQ连接:

var pairs = from d in someData
            join b in baseList.AsEnumerable()
                on d.someCode equals b.myCode
            select new { b, d };
Run Code Online (Sandbox Code Playgroud)

这将为您someData提供与其对应项配对的每个项目的枚举baseList.从那里,你可以循环连接:

foreach(var pair in pairs)
    pair.b.SomeData += pair.d.DataIWantToConcantenate;
Run Code Online (Sandbox Code Playgroud)

如果你真的想要设置连接而不是+=,请看看LINQ的Union,Intersect或Except方法.


Jon*_*eet 12

LINQ用于查询 - 不用于更新.这意味着使用LINQ查找相应的项目会很好,但是对于修改,您应该使用迭代.

不可否认,您可能希望执行一些适当的查询以baseList首先进入有效的表单 - 例如,Dictionary<string, SomeClass>基于您将用于查找相应项目的属性.