我正在努力修改表达式树。我简化了示例,以便更容易在此处显示。让我们从两个类开始:
public class Filter
{
public string FilterableProperty1 { get; set; }
public string FilterableProperty2 { get; set; }
}
public class Entity
{
public string FilterableProperty1 { get; set; }
public string FilterableProperty2 { get; set; }
public string NonFilterableProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Filter 类中的所有属性也存在于 Entity 类中。现在我想使用 Filter 类通过如下方法返回所需的实体:
public IEnumerable<Entity> GetEntities(Expression<Func<Filter, bool>> filter)
{
Expression<Func<Entity, bool>> convertedFilter = Expression.Lambda<Func<Entity, bool>>(
filter.Body,
Expression.Parameter(typeof(Entity), filter.Parameters[0].Name));
using (MyEntities entities = new MyEntities())
{
return entities.Entities.Where(convertedFilter);
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我只是改变表达式参数的类型。现在,当我像这样调用该函数时:
public …Run Code Online (Sandbox Code Playgroud)