如何使通用linq表达更加“通用”

时间:2011-08-02 19:50:24

标签: c# linq expression

我有以下带有表达式属性的类:

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扩展方法。

任何帮助都会受到赞赏,即使这是一个完全改变的方向。 :)

修改

抱歉,我之前没有提到它,但我不能使用泛型来解决这个问题。不幸的是,我不知道编译时的类型。

2 个答案:

答案 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;
}