使用diff结构C#合并两个列表

时间:2016-12-20 07:19:03

标签: c# linq

我有一个带结构的对象列表

string source, string target, int count

示例数据:

sourcea      targeta      10
sourcea      targetb      15
sourcea      targetc      20

我的其他对象列表是结构

string source, int addnvalueacount, int addnvaluebcount, int addnvalueccount

示例数据:

sourcea    10    25   35

我希望将第二个列表更改为第一个列表结构,然后使用第一个列表进行联合all(concat)。

所以结果应该如下所示:

sourcea      targeta      10
sourcea      targetb      15
sourcea      targetc      20
sourcea      addnlvaluea  10
sourcea      addnlvalueb  25
sourcea      addnlvaluec  35

真诚感谢所有帮助。

由于

1 个答案:

答案 0 :(得分:8)

我建议使用Concat SelectMany;为您提供

List<A> listA = new List<A> {
  new A ("sorcea", "targeta" , 10),
  new A ("sorcea", "targetb" , 15),
  new A ("sorcea", "targetc" , 20),
};

List<B> listB = new List<B> {
  new B ("sourcea", 10, 15, 35),
};

Concat,您只需要添加SelectMany

var result = listA
  .Concat(listB
    .SelectMany(item => new [] { // turn single B item into three A
       new A(item.source, "addnvaluea", item.addnvalueacount),
       new A(item.source, "addnvalueb", item.addnvaluebcount),
       new A(item.source, "addnvaluec", item.addnvalueccount),   
      }));