【问题标题】:Merge items in list with the same key/property合并列表中具有相同键/属性的项目
【发布时间】:2017-03-17 12:56:58
【问题描述】:

这应该不是很难做到,但我正在努力寻找正确的方法。

我有两个具有相同属性的列表。我想做的是将这两个列表合并在一起,并合并/合并列表中具有相同键/属性的各个项目。

这是我的ViewModel

public class GradeViewModel {
    public int GradeId { get; set; }
    public string Name { get; set; }
    public int Total { get; set; }
}

我在这里填充我的列表:

var buyPostGrades = Mapper.Map<IEnumerable<BuyPostGrade>, IEnumerable<GradeViewModel>>(_reportService.GetBuyPostGrades());
var sellPostGrades = Mapper.Map<IEnumerable<SellPostGrade>, IEnumerable<GradeViewModel>>(_reportService.GetSellPostGrades());

现在我想做的是将两个列表合并为一个,如果列表之间有任何项目共享相同的GradeId,那么我想将它们合并为一个项目。

因此,例如,如果我的 buyPostGrades 列表中有一个如下所示的项目:

GradeId = 6,
Name = "TestGrade",
Total = 4

然后我的sellPostGrades 列表中有一个项目,如下所示:

GradeId = 6,
Name = "TestGrade",
Total = 10

然后我想将这两个项目合并为一个,如下所示:

GradeId = 6,
Name = "TestGrade",
Total = 14

我确定有一些 Linq 可以用来执行此操作,但我还是新手,不确定哪种方式最好。

【问题讨论】:

    标签: c# linq list merge


    【解决方案1】:

    假设相同的成绩ID意味着相同的名称,您可以合并两个列表,如下所示:

    var res buyPostGrades
        .Concat(sellPostGrades)
        .GroupBy(x => new {x.GradeId, x.Name})
        .Select(g => new GradeViewModel {
            GradeId = g.Key.GradeId
        ,   Name = g.Key.Name
        ,   Total = g.Sum(x => x.Total)
        }).ToList();
    

    【讨论】:

    • 这正是我所需要的。谢谢!
    猜你喜欢
    • 2019-11-19
    • 2022-11-24
    • 2019-01-18
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2021-08-22
    相关资源
    最近更新 更多