LINQ查询来计算来自联合集合的值

时间:2017-04-25 20:43:42

标签: c# linq

我是使用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中的属性)?

2 个答案:

答案 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);