【发布时间】:2015-11-28 17:15:47
【问题描述】:
基本上我有两个对象列表。我需要根据列表之间匹配的 id 属性从第二个列表更新第一个列表。如何在不使用foreach 循环的情况下实现这一点。
public class Test1
{
int Id;
List<Test2> Test2Values;
}
public class Test2
{
int Test1Id;
string valueString;
}
public class Main
{
public void Test()
{
List<Test1> testList1 = GetTest1();
List<Test2> testList2 = GetTest2();
foreach(Test1 t in testList1)
t.Test2Values = testList2.Where(tl => tl.Test1Id == t.Id).ToList();
}
}
【问题讨论】:
-
foreach是迭代现有列表的正确方法。您可以使用for或List<T>.ForEach,但我认为这两个选项都不那么优雅。如果您正在寻找不错的 LINQ 单线,我认为它不存在。 -
如果您有一个
Id值列表,并且您想创建Test1实例以及与之关联的适当Test2实例,那么您可以用 LINQ 很好地做到这一点。 -
是的,我知道,但我的目标是用 testList2 集中的匹配值填充现有的 testList1。
-
什么都没有。我正在寻找是否可以进行任何“批量”操作。例如,当您进行选择时,您可以在列表之间进行连接。它们比常规的 foreach 快得多。寻找类似的东西(如果存在)。
-
您可以使用 testList2.ToDictionary() 以 Id 作为键并将 Test2Values 作为值,这样“where”将得到优化,因为您不需要遍历整个列表来查找而不是使用字典 [ Id] 一次性获取对象。将添加一个答案。