我正在我的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中重写查询,但不愿意。)
答案 0 :(得分:1)
我会尝试这样的事情
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();