使用LINQ在selectmany子查询中进行聚合

时间:2011-12-11 12:49:03

标签: c# linq linq-to-sql

我正在我的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中重写查询,但不愿意。)

1 个答案:

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