我想允许我的用户编写和执行linq查询。 为此,我需要一个linq解析器。这个解析器只能理解linq表达式,而不能理解完整的C#语言。
所以,例如,如果我们有 班级订单 { public int OrderId; } 列表清单= ...
用户应该能够进入UI “在列表中选择p,其中p.OrderId> 2”; 这将返回orderId> gt的订单2。
它存在吗?
答案 0 :(得分: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; }
}
}
在文件上调用C#编译器。
作为副产品,您可以进行类型检查和其他一些事情。唯一真正的缺点是你需要很好地理解查询将在其中执行的环境;如果你要做的事情之一是了解环境,那么这对你没有多大帮助。
答案 1 :(得分:-1)
您可以创建自己的Linq提供商,这里是a walk through on MSDN