我有以下带有表达式属性的类:
public class ClassWithExpression
{
public Expression<Func<SomeAbstractBaseClass, object>> SomeExpression { get; set; }
}
我需要一个表达式来处理SomeAbstractBaseClass
的所有子类和所有类型的属性选择器(int,string,decimal等)。最终,表达式将传递给像OrderBy
这样的linq扩展方法。就目前而言,它将我锁定在仅出现在基类上的属性中。当尝试传递除字符串prop之外的任何内容时,object
道具选择器会出现问题。
我会好像... ...
public class ClassWithExpression
{
public Expression SomeExpression { get; set; }
}
...但没有任何内容强制表达式基于SomeAbstractBaseClass
的子类。另外,我不确定如何将这样的表达式传递给OrderBy扩展方法。
任何帮助都会受到赞赏,即使这是一个完全改变的方向。 :)
修改
抱歉,我之前没有提到它,但我不能使用泛型来解决这个问题。不幸的是,我不知道编译时的类型。答案 0 :(得分:0)
使用泛型类型约束:
public class ClassWithExpression<T> where T : SomeAbstractBaseClass
{
public Expression<Func<T, object>> SomeExpression { get; set; }
}
答案 1 :(得分:0)
你能做这样的事吗?
private Expression<Func<SomeAbstractBaseClass, object>> SomeExpression;
public void SetExpression<T>(Expression<Func<T, object>> expression)
where T : SomeAbstractBaseClass
{
SomeExpresssion = expression;
}