Qui*_*ver 2 c# linq merge list
这不应该很难做到,但我正在努力寻找正确的方法来做到这一点。
我有两个具有相同属性的列表。我想要做的是将这两个列表合并在一起,并合并/合并列表中具有相同键/属性的各个项目。
这是我的ViewModel:
public class GradeViewModel {
public int GradeId { get; set; }
public string Name { get; set; }
public int Total { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在这里,我正在填充我的列表:
var buyPostGrades = Mapper.Map<IEnumerable<BuyPostGrade>, IEnumerable<GradeViewModel>>(_reportService.GetBuyPostGrades());
var sellPostGrades = Mapper.Map<IEnumerable<SellPostGrade>, IEnumerable<GradeViewModel>>(_reportService.GetSellPostGrades());
Run Code Online (Sandbox Code Playgroud)
现在我想做的是将两个列表合并为一个,如果列表之间有任何项目共享相同的项目,GradeId那么我想将它们合并为一个项目。
因此,例如,如果我的buyPostGrades列表中有一个如下所示的项目:
GradeId = 6,
Name = "TestGrade",
Total = 4
Run Code Online (Sandbox Code Playgroud)
然后我的sellPostGrades列表中有一个项目,如下所示:
GradeId = 6,
Name = "TestGrade",
Total = 10
Run Code Online (Sandbox Code Playgroud)
然后我想将这两个项目合并为一个,如下所示:
GradeId = 6,
Name = "TestGrade",
Total = 14
Run Code Online (Sandbox Code Playgroud)
我确信有一些Linq我可以用来做到这一点,但我仍然不熟悉它,不确定哪种方式最好。
假设相同的等级 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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2624 次 |
| 最近记录: |