我想允许我的用户编写和执行linq查询。为此,我需要一个linq解析器。这个解析器只能理解linq表达式,而不能理解完整的c#语言。
例如,如果我们有课堂秩序{public int OrderId;}List List =…
用户应该能够进入UI"select p in list where p. orderid> 2";这将返回orderId> 2的订单。
它存在吗?
最快的方法是:
-
将表达式嵌入到c#文件中,该文件将生成一个方法,该方法将以expression>形式返回查询;例如,for
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; } } }
-
调用c#编译器
- 加载结果程序集。 访问属性
- 随心所欲地使用Linq树
作为一个副产品,你得到了类型检查和一堆其他的东西。唯一真正的缺点是您需要很好地理解执行查询的环境;如果你想做的一件事是了解环境,那么这对你没有多大帮助。
您可以创建自己的Linq提供程序,下面是在MSDN