Linq以sql组的多个记录

时间:2011-11-16 15:05:07

标签: c# linq-to-sql

有没有办法创建一个linq to sql查询来按Take参数分组?

例如,如果我的表有20条记录,其中一个唯一ID值从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 个答案:

答案 0 :(得分:1)

你能这样分组吗

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

如果您有10个元素,它将创建两组,每组5个

答案 1 :(得分:1)

如果您最终还是要从数据库中检索所有记录,为什么不继续这样做,然后使用以下内容:

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

答案 2 :(得分:1)

你的第二个想法正是我要做的。只需从数据库中获取所有内容并在.NET端循环。可能有一些方法可以使用Aggregate以更加LINQ的方式来实现它,但我相信它们将更难以阅读。如果你以一种懒惰的方式(使用yield来实现枚举器),你仍然只会遍历序列一次,这样你就不会失去性能。

答案 3 :(得分:1)

按原样提取数据,将其提供给容器然后拆分。

您的查询永远不应该永远了解有关他们提取的数据如何向用户显示的任何内容。