这不是很难做到,但我很难找到正确的方法来做到这一点。
我有两个具有相同属性的列表。我想要做的是将这两个列表合并在一起,并将具有相同键/属性的列表中的各个项组合/合并。
这是我的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
我可以用来做这件事,但我还是新手,并且不确定哪种方式最好。
答案 0 :(得分:4)
假设相同的成绩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();