最簡單的方法是隻宣佈它作爲一個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示例代碼的一部分,可能已經隱藏在硬盤上的某個地方。
你爲什麼不告訴我們你得到了什麼錯誤? – LukeH 2010-09-08 11:31:32