最简单的方法就是将其声明为
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");
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 }
)
);
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示例代码的一部分,可能已经隐藏在您的硬盘上了。