我是使用LINQ加入集合和执行计算的新手。我有以下查询加入由StationId加入的 RailwayStation 对象和 ExpenditureData 对象的集合。
var joinedData = (from s in stations join e in expenditureData on s.stationId
equals e.StationId select s).Distinct();
我需要什么LINQ才能从我创建的joinedData
集合中获得排名最高的前十个站点(expenseData中的属性)?
答案 0 :(得分:3)
我试图通过StationCargoCode(一个属性)来分组数据 站对象)获得前10名最高的StationCargoCodes 支出数据也得到总支出数据。
您可以尝试以下查询:
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);
最初,我们根据电台标识加入我们的数据。
然后我们根据StationCargoCode对连接结果进行分组。
分组后,我们将每个组投影到一个具有两个值的匿名对象,一个用于分组的键,另一个用于该键的expenditureAmount的总和。
最后,我们根据TotalExpenditureAmount
按降序排序结果,然后我们选择前10位。
答案 1 :(得分:1)
你可以试试这个:
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);