1

所以我有一组带有属性的对象:

ParentObject parentObj
{
    string SomeProperty1
    string SomeProperty2
}

在查询这些属性之前,需要将它们设为 ToLower() 和 Trim()。我明白我可以做到:

Expression.Call(pe, typeof(string).GetMethod("Trim", Type.EmptyTypes)); // Or ToLower

Expression.Property(pe, typeof(string).GetProperty("SomeProperty1"));

但是我该如何组合它们呢?

我需要的东西相当于

from query in parentObjCollection
where query.SomeProperty1.Trim() == "asdf"
select query

有什么想法吗?

4

1 回答 1

2

Expression.Property返回一个表达式本身,您可以将其用作调用的第一个参数(完整示例):

var parent = new ParentObject{ SomeProperty1 = "    test" };
var pe = Expression.Constant(parent);
var property = Expression.Property(pe, typeof(ParentObject).GetProperty("SomeProperty1"));
var call = Expression.Call(property, typeof(string).GetMethod("Trim", Type.EmptyTypes));

var result = Expression.Lambda(call).Compile().DynamicInvoke();

Console.WriteLine(result); // -> "test"

请注意,我必须修改您的Expression.Property电话。

于 2013-02-16T15:08:35.370 回答