2011-11-16 91 views
2

有沒有辦法創建一個LINQ到SQL查詢分組由Take參數?LINQ到SQL組由多個記錄

舉例來說,如果我有一個具有20條記錄從1至20中的一個唯一的ID值的表,我想獲得的5條記錄進行分組的一組記錄:

Group 1: 1,2,3,4,5 
Group 2: 6,7,8,9,10 
.... 

我能想到的兩種方法可以做到這一點

通過使5個查詢: 第一個查詢通過使一個查詢計數的總記錄,並在接下來的4個查詢將選擇查詢在那裏我跳過5,並採取5

而且,循環通過結果一個內部索引和創建對象的組5

有沒有更好的方法來做到這一點與linq到SQL?

+2

我想添加一個「groupId」字段到表中,並在組中使用該條款 – Alex

+0

orderBy可能並不總是相同的,所以在不同的情況下,項目可以有不同的組 – Atzoya

+0

簡短的回答是,linq doesn除了跳過/取出之外,沒有內置任何東西。這是一個分頁表嗎?只是想知道爲什麼你需要一次性得到所有的團體。我通常首先得到一個計數,然後在用戶瀏覽頁面時跳過/取得。 –

回答

1

你的第二個想法正是我要做的。只需從數據庫和.NET端的循環中獲取所有內容。可能有方法使用Aggregate以更LINQ方式進行,但我相信他們會更難閱讀。如果你以懶惰的方式來做(使用yield來實現枚舉器),你仍然只會遍歷序列一次,所以你不會失去性能。

1

你能集團這樣

var items = from i in arr 
       let m = i/5 
       group i by m into d 
       select new { d }; 

如果你有10個元素,將創建兩個組各5

1

如果你最終將會從數據庫中檢索的所有記錄不管怎麼說,爲什麼不直接繼續,然後使用這樣的事情:

collection.GroupBy(x => collection.IndexOf(x)/ 5);

+0

我用一個我能想到的最簡單的數據做了一個例子,實際的表沒有從1到20的值 – Atzoya

+0

collection.GroupBy(x => collection.IndexOf(x)/ 5); – twaggs

+0

它是優雅的,但我認爲它會破壞性能。 – Atzoya

1

將您的數據按原樣提交給容器然後將其拆分。

您的疑問絕不應該,有史以來要知道關於如何向用戶顯示它們所提供的數據的任何內容。