La forma más fácil sería simplemente declarará como un Expression<Func<...>>
public static class Program {
public static void Main() {
Expression<Func<DummyClass, Boolean>> predicate = WageConstIn => WageConstIn.Serialno.ToString().StartsWith("2800");
}
}
Pero si quieres construirlo utilizando diferentes expresiones ...
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 }
)
);
}
}
mayoría de la gente [que he hablado con] quienes ingresan al dominio de árboles de expresión usualmente están satisfechos con la funcionalidad System.Linq.Dynamic. (Que se puede abusar de muchas maneras diferentes). Este fragmento de código de genialidad pura forma parte del código de muestra de Visual Studio, probablemente ya esté escondido en algún lugar de su disco duro.
¿Por qué no nos dices qué error estás recibiendo? – LukeH