[英]LINQ query to calculate values from joined collection
我是第一次使用LINQ来加入集合和执行计算。 我有以下查询它连接火车站有对象的集合和ExpenditureData对象通过的stationID加入。
var joinedData = (from s in stations join e in expenditureData on s.stationId
equals e.StationId select s).Distinct();
从我创建的joinedData
集合中,我需要什么LINQ来获得前10个站,这些站的前十年支出最高(支出数据中的属性)?
我正在尝试按StationCargoCode(Station对象中的一个属性)对数据进行分组,以获取支出数据最高的前10个StationCargoCode,并获取总支出数据。
您可以尝试以下查询:
var joinedData = (from s in stations
join e in expenditureData
on s.stationId equals e.StationId
group by s.StationCargoCode into gr
select new
{
StationCargoCode = gr.Key,
TotalExpenditureAmount = gr.Sum(ed=>ed.expenditureAmount)
}).OrderByDescending(sc=>sc.TotalExpenditureAmountExpenditureAmount)
.Take(10);
最初,我们根据测站ID加入我们的数据。
然后,我们根据StationCargoCode对加入的结果进行分组。
分组后,我们将每个组投影到一个具有两个值的匿名对象,一个值用于分组的键,另一个值用于该键的expenseAmount的总和。
最后,我们基于TotalExpenditureAmount
以降序对结果进行排序,然后选择前10个。
您可以尝试以下方法:
var joinedData = (from s in stations
join e in expenditureData on s.stationId equals e.StationId into g
select new{s,g})
.OrderByDescending(v=>v.g.Max(r=>r.expenditureAmount))
.Take(10)
.Select(v=>v.s);
var joinedData = (from s in stations
join e in expenditureData on s.stationId equals e.StationId into g
select new{s.StationCargoCodes ,Max=g.Max(r=>r.expenditureAmount)})
.OrderByDescending(v=>v.Max)
.Take(10);
如果只需要StationCargoCodes
则在末尾添加一个Select
调用,如下所示:
.Select(e=>e.StationCargoCodes);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.