Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 展开特定的GroupBy和分页_C#_Linq - Fatal编程技术网

C# 展开特定的GroupBy和分页

C# 展开特定的GroupBy和分页,c#,linq,C#,Linq,我有一个LINQ查询,它根据动态属性过滤和排序数据库中的记录列表,并根据当前分页设置跳过/获取适当数量的记录 这一切都很好。现在,我想再次通过动态键对记录进行分组,并能够根据用户的选择分别展开分组。此外,我需要这与分页工作 例如,我有一个列表,其中有100条新记录{Name=…,Category=…,Prop1=…,Prop2=…,},它们已经从所有记录的集合中筛选和排序了。假设我们有10个不同的类别,范围从1到10,当前分页设置为从0开始的10个项目 现在我想让这些记录按类别分组,假设类别==

我有一个LINQ查询,它根据动态属性过滤和排序数据库中的记录列表,并根据当前分页设置跳过/获取适当数量的记录

这一切都很好。现在,我想再次通过动态键对记录进行分组,并能够根据用户的选择分别展开分组。此外,我需要这与分页工作

例如,我有一个列表,其中有100条新记录{Name=…,Category=…,Prop1=…,Prop2=…,},它们已经从所有记录的集合中筛选和排序了。假设我们有10个不同的类别,范围从1到10,当前分页设置为从0开始的10个项目

现在我想让这些记录按类别分组,假设类别==5项匹配这3项,类别==8项匹配这10项的组被展开,其余的被折叠

应该退还什么

Group {Category == 1)
Group {Category == 2)
Group {Category == 3)
Group {Category == 4)
Group {Category == 5)
    {
        { Name, Category, Prop1, Prop2, ... }
        { Name, Category, Prop1, Prop2, ... }
        { Name, Category, Prop1, Prop2, ... }
    }
Group {Category == 6)
Group {Category == 7)
Group {Category == 8)
    {
        { Name, Category, Prop1, Prop2, ... }
    }
因此,“条目”的返回量是10。折叠的类别对每个条目计1个条目,扩展的类别对它们所持有的项目计。上一次扩展的类别被“削减”,因为项目将超过条目10的总请求量

理想情况下,这一切都基于IQueryable,因此只有请求的项才能从数据库中提取


我确实调查了GroupBy和GroupJoin,但我不确定如何根据请求的记录计数限制这些分组中的项目。

限制从数据库检索的记录变得很棘手,因为它们现在实际上是可变的,而不是恒定的,即它们随组中项目的数量而变化。你可能会发现更容易做的是在外部集合上翻页-小组记录并根据需要加载子项。我必须同意Simon的观点。我认为只在外部集上分页会更简单,也更有用。例如,在您的示例中,如果类别8有多个项目,会发生什么情况?你能把分类分成多页吗?如果是这样,用户如何知道该组中实际上有更多的项目?另一种选择是将列表展平,这样就没有分组,然后只显示每行的类别信息。如何仅展平特定组的列表?