C#创建一个表达式树
我试图使用表达式树在LINQ代表下面的查询来创建一个动态查询C#创建一个表达式树
WageConstIns.Where(WageConstIn => WageConstIn.Serialno.ToString().StartsWith("2800"));
我试图像这样创建:
MemberExpression le1 = LinqExpression.Property(paramExp, "Serialno");
MethodCallExpression le2 = LinqExpression.Call(le1, typeof(string).GetMethod("ToString", System.Type.EmptyTypes));
ConstantExpression le3 = LinqExpression.Constant("2800");
MethodCallExpression le4 = LinqExpression.Call(le2, typeof(string).GetMethod("StartsWith"));
我在运行时遇到错误。上述查询如何最好的使用表达式树来构建?
最简单的方法是只宣布它作为一个Expression<Func<...>>
public static class Program {
public static void Main() {
Expression<Func<DummyClass, Boolean>> predicate = WageConstIn => WageConstIn.Serialno.ToString().StartsWith("2800");
}
}
但是,如果你想建造它使用不同的表情......
public static class Program {
public static void Main() {
var param = Expression.Parameter(typeof(DummyClass), "WageConstIn");
var constValue = Expression.Constant("2800");
// WageConstIn => WageConstIn.Serialno.ToString().StartsWith(...)
var first = Expression.Lambda(
parameters: param,
body: Expression.Call(
instance: Expression.Call(
instance: Expression.Property(param, "Serialno"),
methodName: "ToString",
typeArguments: null,
arguments: null
),
methodName: "StartsWith",
typeArguments: null,
arguments: new[] { constValue }
)
);
// WageConstIn => Convert.ToString(WageConstIn.Serialno).StartsWith(...)
var second = Expression.Lambda(
parameters: param,
body: Expression.Call(
instance: Expression.Call(
type: typeof(Convert),
methodName: "ToString",
typeArguments: null,
arguments: new[] { Expression.Property(param, "Serialno") }
),
methodName: "StartsWith",
typeArguments: null,
arguments: new[] { constValue }
)
);
}
}
大多数人[我已经谈到]谁输入表达式树的域通常满足System.Linq.Dynamic功能。 (这可以被滥用到许多不同的方式。)这个纯粹迷人的代码片段是Visual Studio示例代码的一部分,可能已经隐藏在硬盘上的某个地方。
请为表达式树提供帮助:DummyCol.Where(DummyItem => Convert.ToString(DummyItem.Serialno).StartsWith(“2008”)) – 2010-09-08 13:50:41
我已将第二个表达式树添加到示例代码中。 – sisve 2010-09-09 13:33:08
你为什么不告诉我们你得到了什么错误? – LukeH 2010-09-08 11:31:32