【问题标题】:LINQ and dynamic queries with paging and without LINQ2SQL带有分页和不带 LINQ2SQL 的 LINQ 和动态查询
【发布时间】:2009-11-25 23:00:41
【问题描述】:

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

我的情况如下。我有一个正在执行业务逻辑和 DAL 逻辑的 Web 服务。 Webforms 应用程序是分开的。我有一些页面,其中包含用户想要过滤的每个字段的复选框,还有一个用于输入每个过滤器值的文本框。我的 Web 服务有一个 GetByFilter 方法,我在其中传递了一些列表。 QueryObject 是一个类,字符串:filedName,对象:fieldValue。

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

更糟糕的是——我不使用 LINQ2SQL,但我使用了一些自定义 DAL 和存储库,如果需要,它们可能会返回 IQuery(比如这个: http://msdn.microsoft.com/en-us/magazine/dd569757.aspx 滚动到存储库)。

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

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

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

【问题讨论】:

    标签: linq dynamic paging


    【解决方案1】:

    当然有可能,您希望创建自己的 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 Data Services (Astoria) 对你有没有用

    【讨论】:

    • 谢谢,事实证明,自定义数据提供者并没有我想象的那么复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多