【问题标题】:How can I construct and save to a DB for later use a semi-arbitrary lambda expression?如何构造并保存到数据库以供以后使用半任意 lambda 表达式?
【发布时间】:2012-04-29 23:35:11
【问题描述】:

我正在创建一个报告引擎。我试图使其更通用的挑战之一是试图弄清楚如何为用户的查询提供更大的灵活性,这意味着生成自己的查询以供以后使用,而不是使用我提供的固定集合。

例如,假设我有一个 Document 对象,它有 N 个 Section 对象,其中有 N 个 Line 对象。

在具有更多静态目标的代码中,我可以使用文档列表上的 where 子句和 lambda 表达式轻松获取文档列表,其中有一个 Section 具有一个 Line 的值包含一些文本。

但是,有很多(几乎无限)可能的表达方式,因此将人们限制在一个子集或必须将每个可能的路径编码为参数化方法实际上并不可行。

所以问题是,我该怎么做 1) 从字符串数据构造一个 lambda 表达式(这意味着我如何有效地向服务器发布一些可以灵活转换为表达式的数据)和 2) 我如何保存该表达式以后在数据库中使用?

可能只有 #1 是真正相关的,因为如果我可以在 POST 数据时构造表达式,我可以将该字符串信息存储到数据库并执行相同的过程,但我目前不知道如何完成 #1

有什么建议吗?我觉得这在理论上是可行的,但我显然缺少基本方法。

【问题讨论】:

标签: c# lambda


【解决方案1】:

不确定这是否对您有帮助,但这里有一些建议:

  1. 考虑使用谓词生成器。 Here's 有关该方法的更多信息。

  2. 您可以使用动态 linq,并且可以将查询保存在数据库中以供以后使用,就像常规字符串一样。我对这种方法没有经验,但如果您有兴趣,可以阅读here

祝你的引擎好运,听起来很有趣!

【讨论】:

  • 感谢阅读材料。我会调查并报告。
  • 谢谢你 - 我一直在寻找一种方法来继续使用像 EF 这样的基于 LINQ 的提供程序,但在链的末尾使用字符串来选择列。 DynamicQuery 完成了这项工作,虽然语法有点尴尬:使用 System.Ling.Dynamic; var items = db.AsQueryable().....Select("new(Col1,Col2,Col3)").Cast().ToArray();
猜你喜欢
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 2015-09-06
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多