合并两个List <T>的最简单方法

Chr*_*all 1 c# ienumerable

我有两个List<Name>s:

public class Name
        {
            public string NameText {get;set;}
            public Gender Gender { get; set; }
        }

public class Gender
        {
            public decimal MaleFrequency { get; set; }
            public decimal MaleCumulativeFrequency { get; set; }
            public decimal FemaleCumulativeFrequency { get; set; }
            public decimal FemaleFrequency { get; set; }
        }
Run Code Online (Sandbox Code Playgroud)

如果NameText属性相匹配,我想取FemaleFrequencyFemaleCumulativeFrequency从女性的名单NameS和MaleFrequencyMaleCumulativeFrequency值从男性的名单NameS和创建一个列表Name与使用全部四个属性秒.

使用.Net 3.5在C#中最简单的方法是什么?

Dav*_*ton 5

您是否尝试在合并列表时对每个值求和?如果是这样,尝试这样的事情:

List<Name> list1 = new List<Name>();
List<Name> list2 = new List<Name>();

List<Name> result = list1.Union(list2).GroupBy(x => x.NameText).Select(x => new
Name
{
    NameText = x.Key,
    Gender = new Gender
    {
        FemaleCumulativeFrequency = x.Sum(y => y.Gender.FemaleCumulativeFrequency),
        FemaleFrequency = x.Sum(y => y.Gender.FemaleFrequency),
        MaleCumulativeFrequency = x.Sum(y => y.Gender.MaleCumulativeFrequency),
        MaleFrequency = x.Sum(y => y.Gender.MaleFrequency)
    }
}).ToList();
Run Code Online (Sandbox Code Playgroud)

这样做有以下几点:

  1. 联合列表,创建IEnumerable<Name>包含两个列表内容的列表.
  2. 按NameText属性对列表进行分组,因此如果存在具有相同NameText的重复名称,它们将显示在同一组中.
  3. 选择一组新的Name对象,每个分组的Name属性总和...如果更有意义,也可以使用Average.
  4. List<Name>通过调用"ToList()"方法将整个查询转换为a .

编辑:或者,正如您在下面所说,您只想合并两个列表...执行此操作:

List<Name> allNames = femaleNames.Union(maleNames).ToList();
Run Code Online (Sandbox Code Playgroud)