Linq to sql group по количеству записей - PullRequest
2 голосов
/ 16 ноября 2011

Есть ли способ создать запрос linq to sql для группировки по параметру Take?

Например, если у меня есть таблица с 20 записями с одним уникальным значением идентификатора от 1 до 20, я хотел бы получить группу записей, сгруппированных по 5 записям:

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

Я могу придумать два способа сделать это

Сделав 5 запросов: Первый запрос для подсчета общего количества записей, а следующие 4 запроса - это выборочные запросы, где я пропускаю 5 и беру 5.

И, сделав один запрос, зацикливая результаты с внутренним индексом и создавая объекты с группами 5

Есть ли более элегантный способ сделать это с помощью linq to sql?

Ответы [ 4 ]

1 голос
/ 16 ноября 2011

Получите ваши данные как есть, передайте их в контейнер , затем разбейте их на части.

Ваши запросы никогда не должны когда-либо знать о том, какданные, которые они извлекают, показываются пользователю.

1 голос
/ 16 ноября 2011

Если вы собираетесь в конечном итоге получить все записи из базы данных, почему бы просто не пойти дальше и не сделать это, а затем использовать что-то вроде этого:

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

1 голос
/ 16 ноября 2011

Твоя вторая идея - именно то, что я хотел бы сделать.Просто получите все из базы данных и выполните цикл на стороне .NET.Возможно, есть способы использовать Aggregate, чтобы сделать это в стиле LINQ, но я уверен, что их будет сложнее читать.Если вы делаете это ленивым образом (используйте yield для реализации перечислителя), вы все равно будете повторять последовательность только один раз, чтобы не потерять производительность.

1 голос
/ 16 ноября 2011

Можете ли вы группировать, как это

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

Если у вас было 10 элементов, это создаст две группы по 5 в каждой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...