LinqGroupby如何求和不同的4个模型值
本文关键字:4个 模型 何求和 求和 LinqGroupby | 更新日期: 2023-09-27 18:26:37
我有三个模型属性,比如:
public decimal Date{ get; set; }
public decimal Money{ get; set; }
public string CityId{ get; set; } // grouping property
我需要按"城市ID"分组,而不是选择按"城市Id"分组的日期和金钱。
代码:
var results = model.Select(x => new MyViewModel(){
Date= x.Date,
Money= x.Money,
CityId= x.CityId,
}).GroupBy(x=>x.CityId)
.ToList();
我可以通过这个Linq查询得到我想要的东西。然后我想用这个代码匹配我的值:
for (int i = 0; i < model.Count; i++)
{
NewList myList = new NewList();
myList.Date= results[i]. // i cant get my properties(Date,Money, CityId)
myList.Money= results[i]. // i cant get my properties(Date,Money, CityId)
myList.CityId= results[i]. // i cant get my properties(Date,Money, CityId)
}
拼写了几个小时后,这个代码怎么了?如何获取Date
、Money
、CityId
属性?
GroupBy
返回项目分组、一个包含所有分组项目的对象以及该组所属的键。因此,当前您的results
的类型类似于List<int, IGrouping<MyViewModel>>
。你要找的显然是List<MyViewModel>
,你可以使用SelectMany
:
var results = model.Select(x => new MyViewModel()
{
Date= x.Date,
Money= x.Money,
CityId= x.CityId,
})
.GroupBy(x=>x.CityId)
.SelectMany(x => x)
.ToList();
这应该将您的分组扁平化为一个单独的列表,项目按组排序。
更新请注意,上面的代码假定您有意使用GroupBy
。正如评论中所指出的,如果这是您唯一的用例,那么简单的OrderBy
可能是更好的选择:
var results = model.Select(x => new MyViewModel()
{
Date= x.Date,
Money= x.Money,
CityId= x.CityId,
})
.OrderBy(x => x.CityId)
.ToList();