2012-05-10 49 views
13

我有一個表有以下3列,ID,ShortCode,UploadDate。LINQ組,然後訂單組的結果

我想使用LINQ通過短代碼對結果進行分組(並保留所有結果),然後對這些組進行排序並返回一個列表。

我有以下幾點:

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList<PDFDocument>(). 
GroupBy(b=>b.ShortCode) 
.SelectMany(b=>b).ToList<PDFDocument>() 

我要返回所有結果,由簡碼分組,依UploadDate分類每個組內的項目和團體進行排序,使具有最新的文件中它的人第一。

有誰知道這是甚至可能嗎?

回答

31

嘗試

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
    .AsEnumerable() 
    .OrderByDescending(d => d.UploadDate) 
    .GroupBy(d => d.ShortCode) 
    .SelectMany(g => g) 
    .ToList(); 

這應該

  • 整理上傳日期的項目(降序所以最新的在前)
  • 然後通過短羣他們代碼 - 所以在每個組中的項目仍然排序
  • 該組仍然在desc結束順序,因此無需再訂製再次
  • 最後將結果連接到一個列表

如果性能是這種種的每一個內容的問題你很多會更好做

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
    .AsEnumerable() 
    .GroupBy(d => d.ShortCode) 
    .Select(g => g.OrderByDescending(d => d.UploadDate)) 
    .OrderByDescending(e => e.First().UploadDate) 
    .SelectMany(e => e) 
    .ToList(); 

單獨分組,而不是先排序所有內容然後分組。

+0

謝謝,這正是我想要的。 – Ketchup

+1

我想知道訂單放置「OrderBy」+「GroupBy」+「OrderBy」,這完全回答它 – EdmundYeung99

+0

這是返回我的實體類型列表,但我希望它是類型組,編譯器錯誤我是得到的是 不能將類型'System.Collections.Generic.List '隱式轉換爲'System.Collections.Generic.IEnumerable >'。存在明確的轉換(您是否缺少演員?) –

5

事實上,你不想通過短代碼進行分組,你想按他們的順序。所以下面的查詢應該做的伎倆:

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList() 
.OrderBy(b => b.ShortCode) 
.ThenBy(b => b.UploadDate) 
.ToList() 

編輯 如果你真的想使用的GroupBy,你可以這樣做是這樣的:

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList() 
.GroupBy(b => b.ShortCode) 
.SelectMany(grouping => grouping.OrderBy(b => b.UploadDate)) 
.ToList() 

但我勸阻了。如果你不想要團體,那麼創建團隊就沒有意義了!

第二個編輯

我沒有得到你想要的錄入下令太集團。它複雜化了一點查詢:

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList() 
.GroupBy(b => b.ShortCode) 
.Select(grouping => grouping.OrderByDescending(b => b.UploadDate)) 
.OrderByDescending(grouping => grouping.First().UploadDate) 
.SelectMany(grouping => grouping) 
.ToList() 
+0

能夠貶低至少解釋他爲什麼這樣做的人嗎? – Falanwe

+0

這是否按順序排列組內的元素?然後還要訂購分組結果? – Ketchup

+0

所有具有第一個ShortCode的元素將首先位於結果列表中,由UpdateTime排序,然後是所有具有第二個ShortCode的元素,同樣排序,等等。結果將與您在Excel中獲得的結果類似,當您將元素主要由列,然後由另一個列出時。 – Falanwe