2010-05-13 108 views
3

請不要給我一個完整的工作示例,我想知道如何做到這一點,而不是讓一些代碼,我可以複製粘貼我該如何做到這一點在LINQ查詢中聚合,分組,

這是我需要的查詢,並不能爲生命我在LINQ中創建它。

SELECT * FROM 
dbo.Schedules s, dbo.Videos v 
WHERE s.VideoID = v.ID 
AND s.ID IN 
(
    SELECT MAX(ID) FROM dbo.Schedules 
    WHERE ChannelID = 1 
    GROUP BY VideoID 
) 
ORDER BY v.Rating DESC, s.StartTime DESC 

我在LINQ的「IN」的查詢我認爲,這是像這樣

var uniqueList = from schedule in db.Schedules 
        where schedule.ChannelID == channelID 
        group schedule by schedule.VideoID into s 
        select new 
        { 
         id = s.Max(i => i.ID) 
        }; 

它可能是錯的,但現在我不能在另一個查詢檢查這在where子句中uniqueList.Contains(schedule.ID)

可能有更好的方法來寫這個查詢,如果你有任何想法,我會喜歡一些提示。

我得到這個錯誤,它沒有太大的意義。

方法'System.Linq.Queryable.Contains(System.Linq.IQueryable,TSource)'的類型參數不能從用法中推斷出來。嘗試明確指定類型參數。

回答

2

嘗試使用.Where(sInner => s.ID == sInner.ID).Any()。

我只能在簡單的列表中使用linq表達式中的.Contains。雖然你發佈的東西似乎是編譯時錯誤,但一旦你解決了它,我想你最終會得到像我以前那樣的運行時錯誤。

+0

這似乎已經完成了技巧,謝謝你的提示。 – 2010-05-13 22:14:56

+2

你可以做得更簡單一點:'.Any(sInner => s.ID == sInner.ID)' – 2010-05-13 22:21:24