2011-12-11 35 views
1

我在我的MVC應用程序中實現一些基本功能的排名, 但我碰到一些離奇失誤執行這個查詢時運行:聚集在子查詢的SelectMany使用LINQ

此查詢的目的是找到總時間最長的前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:只有一個表達式可以在選擇列表中指定當子查詢不與引入存在。

坦率地說,我不知道這個異常意味着什麼或如何解決它。 有沒有一個微妙的錯誤,我缺少,或者我超越了LINQ to SQL的力量? (我能夠重寫查詢SQL中,如果是這樣的話,但寧願不要。)

+0

這可能會有幫助。 http://stackoverflow.com/questions/820552/linq-query-with-sum-and-order-by – phant0m

回答

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