如何使通用的linq表达式更加“通用”
本文关键字:通用 表达式 何使通 linq | 更新日期: 2023-09-27 18:04:32
我有以下类的表达式属性:
public class ClassWithExpression
{
public Expression<Func<SomeAbstractBaseClass, object>> SomeExpression { get; set; }
}
我需要一个表达式能够处理SomeAbstractBaseClass
的所有子类和所有类型的属性选择器(int, string, decimal等)。最后,表达式将传递给linq扩展方法,如OrderBy
。目前,它将我锁定在只出现在基类上的属性中。object
道具选择器是有问题的,当试图通过任何东西,但一个字符串的道具。
我可以接受…
public class ClassWithExpression
{
public Expression SomeExpression { get; set; }
}
…但是没有什么强制要求表达式必须基于SomeAbstractBaseClass
的子类。此外,我不确定如何将这样的表达式传递到OrderBy扩展方法中。
对不起,我之前没有提到,但是我不能使用泛型来解决这个问题。不幸的是,我不知道编译时的类型。
使用泛型类型约束:
public class ClassWithExpression<T> where T : SomeAbstractBaseClass
{
public Expression<Func<T, object>> SomeExpression { get; set; }
}
你能这样做吗?
private Expression<Func<SomeAbstractBaseClass, object>> SomeExpression;
public void SetExpression<T>(Expression<Func<T, object>> expression)
where T : SomeAbstractBaseClass
{
SomeExpresssion = expression;
}