2011-01-13 29 views
2

我想使一個Linq實體查詢工作,但我不知道。EF Linq實體查詢與groupby總和和

這是我的我的SQL查詢這是工作的罰款:

SELECT SUM(ca.PointValue) as Points, ua.UserFBID, MIN(ua.[Date]) as FirstDate 
    FROM [LeaderOfNow].[dbo].[QuestionAnswer] ca 
    inner join [LeaderOfNow].[dbo].[LONUserAnswers] ua 
    on ca.Id = ua.AnswerId 
    group by ua.UserFBID 
    order by Points desc, FirstDate asc 

一個迄今爲止我最好的嘗試是:

  var leaders = db.LONUserAnswers 
       .GroupBy(a => a.UserFBID) 
       .Select(a => 
       new 
       { 
        FBID = a.Key, 
        CurrentPoints = a.Select(v => v.QuestionAnswer.PointValue).Sum(), 
        FirstAnswered = a.Min(v => v.Date) 
       }) 
.OrderByDescending(a => a.CurrentPoints) 
       .OrderBy(a => a.FirstAnswered) 
       .Take(10) 
       .ToList(); 

但是呈現SQL亂七八糟的,只有尊重第一階而不是第二,我需要工作。有什麼建議我做錯了什麼?感謝您的幫助。

+0

EF將始終生成大量的SQL。不要擔心。至於訂購的東西,已經得到了答覆。 – tster 2011-01-28 14:44:44

回答

4

當您鎖定OrderBy-Functions時,必須使用ThenBy()ThenDescendingBy()作爲後者。

+0

非常感謝。那樣做了。 – 2011-01-13 23:16:38