2009-11-25 53 views
1

我尝试了一些使用LINQ动态查询的方法 - LINQKit和 LINQ动态查询库。我不喜欢第二个,因为它会杀死LINQ的想法 - 能够在编译时检查查询。而对于LINQKit,我没有为我的场景找到一个好例子。我也不喜欢过度使用反射。LINQ和带有分页和LINQ2SQL的动态查询

我的场景如下。我有一个正在做业务逻辑和DAL逻辑的Web服务。 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)。取(iPageSize);

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

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

回答

0

这当然是可能的,你要找什么是创建自己的IQueryable,“自定义LINQ提供程序”

这里的MSDN文章:http://msdn.microsoft.com/en-us/library/bb546158.aspx 和马特·沃伦的有上有一个博客系列: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数据服务(道夫)是任何使用您

+0

感谢的,事实证明,自定义数据提供者不像我想的那么复杂。 – JustAMartin 2009-11-26 11:42:47