【发布时间】:2017-12-21 23:24:35
【问题描述】:
我有这个查询,它通过 UniqueGroupId 对所有项目进行分组
result = ProductList1.Except(productlist3).Union(ProductList2).GroupBy(a => a.UniqueGroupId).OrderByDescending(a=>a.Key).ToList();
它返回一个List<IGrouping<string,Product>>
它工作正常,每个产品都正确分组,当它找到一个没有设置 UniqueGroupId 的元素时,它会返回一个带有 null 键的巨型组,其中包含所有没有设置正确 UniqueGroupId 的产品。
然后将此查询结果提供给显示内容的视图。
现在,由于结果越来越大,我想实现分页以更好地显示内容,其中每个组都被计为页面的 1 个元素,除了 Key 为 null 的组,在此,每个元素该组应被视为 1 个元素。
我想使用 Skip 和 Take,但显然问题是如果我 Skip(50) 也跳过 Key null 中包含的所有元素,这不是我想要实现的..
我该如何解决这个问题?谢谢
【问题讨论】:
-
视图如何显示结果?视图是否采用分组元素,然后在显示之前将其展平?
-
所涉及的
ProductList变量是否在内存集合中(例如List<Product>)或IQueryables?还有ProductPK 属性的名称(例如Id?)和类型(例如int?) -
@bazz,是的,视图正在获取分组元素列表。
-
@IvanStoev 是的,变量在内存中,Product的PK类型是字符串。名字是Id
-
只要你在内存中合并这两个列表,你就不能进行分页。您需要通过在数据库级别完成并集和组。然后,您可以相应地限制该结果集以翻阅它。没有足够的关于您的实体的信息来告诉您如何构建查询,甚至确定它是否可能。但是,无论如何,为此创建一个存储过程可能会更好,这样就不需要通过您的实体公开任何特定的 API。
标签: c# asp.net-mvc entity-framework linq pagination