当C#的结构不匹配时,在C#中组合两个对象列表

Ope*_*ack 4 .net c# asp.net merge concat

我有两个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;
  }
Run Code Online (Sandbox Code Playgroud)

class One包含有关id,name和一些数字字段的信息.另一方面,第二类包含id,名称(包含与第一类中相同的数据),但它也包含分层信息.喜欢谁是当前节点的父级和级别信息(在一级中可用)

我需要根据Id字段合并这两个类并产生如下结果:

class Three{
       int id;
       string name;   
       string parentName;
       int parentId;
       int level;
       int total;
       int val2;
  }
Run Code Online (Sandbox Code Playgroud)

在C#中获得所需结果的最有效方法是什么?如果列表相同,我们可以使用Concat方法.

Ren*_*ogt 8

您可以使用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();
Run Code Online (Sandbox Code Playgroud)

这结合了基于相等ids 的两个源列表的元素.其结果是列表Three结合的匹配情况下的值创建的实例OneTwo.