【发布时间】:2011-04-17 04:31:31
【问题描述】:
我想让我的用户编写和执行 linq 查询。 为此,我需要一个 linq 解析器。这个解析器只能理解 linq 表达式,而不是完整的 C# 语言。
所以,例如,如果我们有 班级秩序 { 公共 int OrderId; } 列表列表 = ...
用户应该能够在 UI 中输入 "在 p.OrderId > 2 的列表中选择 p"; 这将返回 orderId > 2 的订单。
它存在吗?
【问题讨论】:
我想让我的用户编写和执行 linq 查询。 为此,我需要一个 linq 解析器。这个解析器只能理解 linq 表达式,而不是完整的 C# 语言。
所以,例如,如果我们有 班级秩序 { 公共 int OrderId; } 列表列表 = ...
用户应该能够在 UI 中输入 "在 p.OrderId > 2 的列表中选择 p"; 这将返回 orderId > 2 的订单。
它存在吗?
【问题讨论】:
最快的方法是:
将表达式嵌入到 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; }
}
}
对文件调用 C# 编译器。
作为一个副产品,你会得到类型检查和一堆其他的东西。唯一真正的缺点是您需要很好地了解查询将在其中执行的环境;如果您尝试做的事情之一是了解环境,那么这对您没有多大帮助。
【讨论】:
您可以创建自己的 Linq 提供程序,这里是 a walk through on MSDN
【讨论】: