合并具有相同键/属性的列表项

3

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

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

这是我的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 可以用来完成这个任务,但是我还是新手,不确定哪种方法最好。

1个回答

10
假设相同的等级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();

这正是我所需要的。谢谢! - Quiver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接