LINQ和带分页的动态查询,没有LINQ2SQL

时间:2009-11-25 23:00:41

标签: linq dynamic paging

我尝试过一些使用LINQ动态查询的方法 - LINQKit和 LINQ动态查询库。我不喜欢第二种,因为它以某种方式杀死了LINQ的想法 - 能够在编译时检查查询。使用LINQKit我没有找到适合我的场景的好例子。我也不喜欢过度使用反射。

我的方案如下。我有一个Web服务,它正在做业务逻辑和DAL逻辑。 webforms应用程序是分开的。我有一些页面包含用户想要过滤的每个字段的复选框,还有一个文本框用于输入每个过滤器值。我的Web服务有一个方法GetByFilter,我传递一些List。 QueryObject是一个包含字符串的类:filedName,object:fieldValue。

然后我的webservice收到查询对象列表,现在提出了一个大问题:如果字段计数和过滤器值可能会有所不同,如何将其转换为LINQ查询?

更糟糕的是 - 我不使用LINQ2SQL但是我使用了一些带有存储库的自定义DAL,如果需要可以返回IQuery(如下所示: http://msdn.microsoft.com/en-us/magazine/dd569757.aspx 滚动到存储库)。

我知道我可以使用LINQ2SQL分页: var PagedData = query.Skip((iPageNum - 1)* iPageSize).Take(iPageSize);

那么我如何从LINQ获取动态查询参数(以及iPageNum和iPageSize)到我的底层DAL实现以特定于数据提供者的方式执行这些查询?也许我必须将我的DAL实现为一些LINQ数据提供者(我不知道该怎么做)?

问题是 - 我不想依赖LINQ2SQL(然后我可以将我的存储库实现为LINQ2SQL的包装器)但同时我想在我的DAL之外的任何地方都有LINQ查询功能。有可能吗?

1 个答案:

答案 0 :(得分:0)

这当然是可能的,您所期待的是创建自己的IQueryable,一个“自定义LINQ提供商”

以下是MSDN文章:http://msdn.microsoft.com/en-us/library/bb546158.aspx Matt Warren有一个关于它的博客系列:http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx

我建议从它开始看看它有多难以及它是否适合你!

如果您决定反对,请阅读此博文:http://www.hanselman.com/blog/RealWorldAppsInDaysNotWeeks.aspx 并查看ADO.Net数据服务(Astoria)是否对您有用