我在哪里可以找到LinQ解析器

时间:2011-04-17 04:31:31

标签: linq parsing

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

所以,例如,如果我们有 班级订单 { public int OrderId; } 列表清单= ...

用户应该能够进入UI “在列表中选择p,其中p.OrderId> 2”; 这将返回orderId> gt的订单2。

它存在吗?

2 个答案:

答案 0 :(得分:1)

最快捷的方法是:

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

    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树用于您心中的内容。
  6. 作为副产品,您可以进行类型检查和其他一些事情。唯一真正的缺点是你需要很好地理解查询将在其中执行的环境;如果你要做的事情之一是了解环境,那么这对你没有多大帮助。

答案 1 :(得分:-1)

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