当结构不匹配时,在 C# 中组合两个对象列表
Combine two list of object in C# when their structure does not match
我有两个classe
Class One{
int id;
string name;
int total;
int val2;
int level;
}
Class Two{
int id;
string name;
string parentName;
int parentId;
int level;
}
class 一个包含有关 id、name 和一些数字字段的信息。
另一方面,Class Two 包含 id、names(其中包含与 class One 中相同的数据),但它还包含层次结构信息。例如谁是当前节点的父节点和级别信息(在 class 中可用)
我需要根据 Id 字段合并两个 classes 并生成如下结果:
class Three{
int id;
string name;
string parentName;
int parentId;
int level;
int total;
int val2;
}
在 C# 中获得所需结果的最有效方法是什么。如果列表相同,我们可以使用 Concat 方法。
您可以为此使用 LINQ 的 Join()
方法:
List<One> l1 = .... // your source list of One
List<Two> l2 = .... // your source list of Two
List<Three> =
l1
.Join(
l2,
x1 => x1.id,
x2 => x2.id,
(x1, x2) => new Three
{
id = x1.id,
name = x1.name,
parentName = x2.parentName,
parentId = x2.parentName,
level = x1.level,
total = x1.total
val2 = x1.val2
})
.ToList();
这会根据相等的 id
组合两个源列表的元素。结果是通过组合 One
和 Two
的匹配实例的值创建的 Three
个实例的列表。
我个人发现在进行联接时使用 LINQ 查询语法更容易观察。我改变了 Renè 的答案来做到这一点:
List<One> list1 = ....; // your source list of One
List<Two> list2 = ....; // your source list of Two
List<Three> list3 = (from one in list1
join two in list2
on one.id equals two.id
select new Three
{
id = one.id,
name = one.name,
parentName = two.parentName,
parentId = two.parentName,
level = one.level,
total = one.total
val2 = one.val2
}).ToList();
我有两个classe
Class One{
int id;
string name;
int total;
int val2;
int level;
}
Class Two{
int id;
string name;
string parentName;
int parentId;
int level;
}
class 一个包含有关 id、name 和一些数字字段的信息。 另一方面,Class Two 包含 id、names(其中包含与 class One 中相同的数据),但它还包含层次结构信息。例如谁是当前节点的父节点和级别信息(在 class 中可用)
我需要根据 Id 字段合并两个 classes 并生成如下结果:
class Three{
int id;
string name;
string parentName;
int parentId;
int level;
int total;
int val2;
}
在 C# 中获得所需结果的最有效方法是什么。如果列表相同,我们可以使用 Concat 方法。
您可以为此使用 LINQ 的 Join()
方法:
List<One> l1 = .... // your source list of One
List<Two> l2 = .... // your source list of Two
List<Three> =
l1
.Join(
l2,
x1 => x1.id,
x2 => x2.id,
(x1, x2) => new Three
{
id = x1.id,
name = x1.name,
parentName = x2.parentName,
parentId = x2.parentName,
level = x1.level,
total = x1.total
val2 = x1.val2
})
.ToList();
这会根据相等的 id
组合两个源列表的元素。结果是通过组合 One
和 Two
的匹配实例的值创建的 Three
个实例的列表。
我个人发现在进行联接时使用 LINQ 查询语法更容易观察。我改变了 Renè 的答案来做到这一点:
List<One> list1 = ....; // your source list of One
List<Two> list2 = ....; // your source list of Two
List<Three> list3 = (from one in list1
join two in list2
on one.id equals two.id
select new Three
{
id = one.id,
name = one.name,
parentName = two.parentName,
parentId = two.parentName,
level = one.level,
total = one.total
val2 = one.val2
}).ToList();