簡體   English   中英

使用LINQ在selectmany子查詢中進行聚合

[英]Aggregation in selectmany subquery using LINQ

我在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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM