【问题标题】:Combine two list of object in C# when their structure does not match当它们的结构不匹配时,在 C# 中合并两个对象列表
【发布时间】:2016-12-29 05:54:50
【问题描述】:

我有两节课

Class One{
   int id;
   string name;   
   int total;
   int val2;
   int level;
}


Class Two{
   int id;
   string name;   
   string parentName;
   int parentId;
   int level;
  }

第一类包含关于 id、name 和一些数字字段的信息。 另一方面,第二类包含 id、名称(包含与第一类相同的数据),但它也包含层次信息。比如谁是当前节点的父节点和级别信息(在第一类中可用)

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

class Three{
       int id;
       string name;   
       string parentName;
       int parentId;
       int level;
       int total;
       int val2;
  }

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

【问题讨论】:

标签: c# asp.net .net merge concat


【解决方案1】:

您可以为此使用 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();

这将基于相等的ids 组合两个源列表的元素。结果是通过组合OneTwo 的匹配实例的值创建的Three 实例列表。

【讨论】:

    【解决方案2】:

    我个人发现在进行连接时使用 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 2022-02-08
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 2021-09-10
      • 1970-01-01
      相关资源
      最近更新 更多