[英]Copy a list of objects from one list to another based on id
基本上我有两个对象列表。 我需要执行类似基于列表之间匹配的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();
}
}
这应该够了吧。 首先从testList2
构建一个字典。 通过Test1Id
对其进行Test1Id
。 然后从testList1
选择每个项目。 检查它的ID是否在字典中。 如果是这样,请用新值替换列表,否则保留旧值。
var dict = testList2
.GroupBy(t2 => t2.Test1Id)
.ToDictionary(
gr => gr.Key,
gr => gr.ToList());
testList1
.Select(t1 =>
{
t1.Test2Values = dict.ContainsKey(t1.Id) ? dict[t1.Id] : t1.Test2Values;
return t1;
})
.ToList();
使用下面的代码获取两个列表之间的公共项目,然后处理下一个:
var result = testList1.Where(p => testList2.Any(p2 => p2.Id == p.Id));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.