【问题标题】:What is the easiest way to save a LINQ query for later use?保存 LINQ 查询以供以后使用的最简单方法是什么?
【发布时间】:2010-10-27 18:34:28
【问题描述】:

我有一个功能请求,以便能够保存用户的搜索以供以后使用。

现在我正在根据用户指定的内容动态构建 LINQ 语句。

所以我开始想,有没有一种简单的方法可以让我简单地获取用户构建的查询,并将其保存在某个地方,最好是我的数据库,以便我以后可以检索它?

是否有某种方法可以将查询保存为 XML 或 JSON,然后稍后重新构建查询?

【问题讨论】:

    标签: linq


    【解决方案1】:

    以前从未这样做过,但我有过这样的想法:

    如果您要让查询针对OData 端点运行,而不是直接针对您的数据库运行查询,您可以想象将生成的 URL 提取为查询字符串,并保存该 URL 以供以后使用。由于 OData 已经有了完善的规范,您将能够从其他人的劳动中获利。

    【讨论】:

    • 这不是一个坏主意。那么我需要在我的服务器上构建一个 OData 端点,然后在我的网站上使用它来保存查询吗?是这个主意吗?
    • 是的,就是这样。巧妙的是,端点可以像您希望的那样公开,并且您可以将其限制为仅包含模型的一个子集。就像我们可以使用 LinqPad 连接到 StackOverflow 以发现有趣的指标一样,您可以让某些客户或业务分析师对您的数据拥有灵活、可查询的视图。此外,通过创建额外层,即使您的底层模型发生变化,您也可以确保 OData 端点的模型保持不变。
    【解决方案2】:

    我会在这里使用特定于域的对象,即使确实存在这样的好东西——当您在 LINQ 中保存序列化查询并且您的基础模型发生更改时会发生什么,从而使每个人保存的查询无效。使用您自己的数据格式应该可以在一定程度上保护您。

    【讨论】:

    • 我并不担心我的底层模型会发生变化。我并不是说这不是一个有效的担忧,但就我而言,我不必担心我的模型会发生变化。
    • 不是在谈论您的模型,而是在谈论(可能无论如何都不存在)用于序列化查询的工具。我敢打赌,随着框架的发展,那里的任何生活都会随着内部结构的变化而改变。
    【解决方案3】:

    看一下 Expression 类。这将允许您预编译查询。尽管将其持久化以供以后使用到数据库以获得更好的性能是值得怀疑的。

    【讨论】:

    • 类似 System.Data.Linq.CompiledQuery 还是您指的是其他东西?
    【解决方案4】:

    我在 PDC10 观看 this presentation 时正在写这篇文章。 1 小时后,他展示了他如何为表达式树构建 JSON 序列化程序。你可能会觉得这很有趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      相关资源
      最近更新 更多