使用LINQ在selectmany子查询中进行聚合
本文关键字:查询 LINQ selectmany 使用 | 更新日期: 2023-09-27 18:17:24
我在MVC应用程序中实现了一些基本的排名功能,但是我在执行这个查询时遇到了一些奇怪的错误:
查询的目的是查找用时最长的前10名车手总用时-即每个车手完成的所有圈数的总和。
var topRiders = from rider in _riderDataProvider.GetAll()
orderby
(from session in rider.Sessions
from lap in session.Laps
select lap.LapTime.TotalSeconds)
.Sum()
descending
select rider;
var result = topRiders.Take(10).ToArray();
但是,执行查询会抛出:
System.Data.SqlClient.SqlException
:当子查询没有引入EXISTS时,只能在选择列表中指定一个表达式。
坦率地说,我不知道这个异常是什么意思,也不知道如何修复它。我是否遗漏了一个微妙的错误,或者我是否超出了LINQ to SQL的能力?(如果是这种情况,我可以在SQL中重写查询,但不希望这样做。)
我会尝试这样做
var topRiders = from rider in _riderDataProvider.GetAll()
select new {
Rider = rider,
TotalTime = (from session in rider.Sessions
from lap in session.Laps
select lap.LapTime.TotalSeconds)
.Sum(),
}
var result = topRiders.OrderByDescending(r=>r.TotalTime)
.Select(r=>r.Rider)
.Take(10).ToArray();