Sé que esto es un hilo viejo, pero aquí es otra manera de hacerlo. Esto tiene la ventaja de ser significativamente más rápido si necesita hacerlo en un bucle. He convertido el resultado de "func" para que sea un objetivo más general.
var p = Expression.Parameter(typeof(string));
var prop = Expression.Property(p, "Length");
var con = Expression.Convert(prop, typeof(object));
var exp = Expression.Lambda(con, p);
var func = (Func<string, object>)exp.Compile();
var obj = "ABC";
int len = (int)func(obj);
En la pregunta original estaba siendo utilizado el código dentro de LINQ así que la velocidad podría ser bueno.Sería posible usar "func" directo en la cláusula where también si se construyó correctamente, por ejemplo,
class ABC
{
public string Name { get; set; }
}
var p = Expression.Parameter(typeof(ABC));
var prop = Expression.Property(p, "Name");
var body = Expression.Equal(prop, Expression.Constant("Bob"));
var exp = Expression.Lambda(body, p);
var func = (Func<ABC, bool>)exp.Compile();
ABC[] items = "Fred,Bob,Mary,Jane,Bob".Split(',').Select(s => new ABC() { Name = s }).ToArray();
ABC[] bobs = items.Where(func).ToArray();
¡Me encantó! Gracias. – Dementic