【发布时间】:2014-08-20 04:42:31
【问题描述】:
我有一个 ASP.NET MVC 5/Entity Framework 网站,网站用户可以在其中建立复杂的查询,对一组用户/项目等进行排序/过滤等。但是,我需要一种方法来维护查询“状态”,将它们发送到其他页面进行进一步操作等。以下是我考虑过的一些方法:
将所有查询结果转换为 IEnumerable(或列表):这将非常低效,因为我需要在内存中加载和枚举列表的所有用户,而我可能只需要其中的一小部分(我正在使用分页)。
使用
ToString方法将查询转换为原始 SQL。但是,这样,虽然我可以分页和查询,但我仍然无法编辑查询。将
IQueryable对象原样保留在内存中的某个位置,以便在下一页/查询等中使用它。除了是一种非常糟糕/低效的做法外,它还会呈现给对象由于 IQueryable 在数据库上下文 (DbContext) 中返回,因此无法使用,因此在释放上下文后将无效。
在页面生命周期之间维护查询对象的“状态”的最佳做法是什么?接受服务器端和客户端的解决方案,只要它们符合我的要求(不在内存中加载整个数据库,能够在执行后修改查询、分页、排序......)
【问题讨论】:
-
分离查询及其specifications。您可以存储规范并将它们重新应用于查询正文。
标签: asp.net asp.net-mvc linq entity-framework iqueryable