【问题标题】:where can I find a LinQ parser在哪里可以找到 LinQ 解析器
【发布时间】:2011-04-17 04:31:31
【问题描述】:

我想让我的用户编写和执行 linq 查询。 为此,我需要一个 linq 解析器。这个解析器只能理解 linq 表达式,而不是完整的 C# 语言。

所以,例如,如果我们有 班级秩序 { 公共 int OrderId; } 列表列表 = ...

用户应该能够在 UI 中输入 "在 p.OrderId > 2 的列表中选择 p"; 这将返回 orderId > 2 的订单。

它存在吗?

【问题讨论】:

    标签: linq parsing


    【解决方案1】:

    最快的方法是:

    1. 将表达式嵌入到 C# 文件中,该文件将生成将查询作为表达式返回的方法>;例如,对于

      from x in Foos select x.Y
      

      你可能会发出:

      class Wrapper {
          IEnumerable<blah> Foos;
          public static Expression<Func<object>> Expr { 
              get { return from x in Foos select x.Y; } 
          }
      }
      
    2. 对文件调用 C# 编译器。

    3. 加载生成的程序集。
    4. 访问属性
    5. 随心所欲地使用 Linq 树。

    作为一个副产品,你会得到类型检查和一堆其他的东西。唯一真正的缺点是您需要很好地了解查询将在其中执行的环境;如果您尝试做的事情之一是了解环境,那么这对您没有多大帮助。

    【讨论】:

      【解决方案2】:

      您可以创建自己的 Linq 提供程序,这里是 a walk through on MSDN

      【讨论】:

      • 听起来您可能想要实现自己的 LINQ provider。这已经在 stackoverflow 上介绍过;见this thread。在 Google 上搜索“LINQ 提供程序”也会出现许多其他示例。
      • 它如何回答我的问题?我还需要写解析器
      • 这就是重点,你不需要,你实现了一个 IQueryable 提供者,你可以“免费”获得 Linq 解析
      猜你喜欢
      • 1970-01-01
      • 2017-05-13
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      相关资源
      最近更新 更多