为了能够动态地在LINQ中使用字符串,我使用了以下辅助函数来构建Lambda表达式:
使用名称和年龄属性时,它可以正常工作,但是使用类型属性时,在辅助函数的“var mySortExpression = Expression.Lambda>(Expression.Property(param, field), param);”执行时会引发以下异常:
为什么会这样呢?为了能够为枚举创建lambda表达式(我认为枚举内部是整数),我应该怎么做才能解决它呢?
谢谢。
编辑:我注意到它也会崩溃任何 DateTime 属性。
public static Func<ObjectToOrder, object> GetSortExpression<ObjectToOrder> (string field) {
var param = Expression.Parameter(typeof(ObjectToOrder), "objectToOrder");
var mySortExpression = Expression.Lambda<Func<ObjectToOrder, object>>(Expression.Property(param, field), param);
return mySortExpression.Compile();
}
我将在下面的示例中解释这个函数的工作原理:我有一个名为Person的类,它有三个属性:
class Person {
public string Name {get;set;}
public int Age {get;set;}
public EnumerateType Type {get;set;}
}
enum EnumerateType {
Normal = 1,
Premium = 2
}
然后,在一个 Person 列表中,我会使用我的辅助函数按任意属性排序,方式如下:
List<Person> people = new List<Person>();
//Create people in the list
//...
people = people.OrderBy(GetSortExpression<Person>("Name")).ToList();
people = people.OrderBy(GetSortExpression<Person>("Age")).ToList();
people = people.OrderBy(GetSortExpression<Person>("Type")).ToList();
使用名称和年龄属性时,它可以正常工作,但是使用类型属性时,在辅助函数的“var mySortExpression = Expression.Lambda>(Expression.Property(param, field), param);”执行时会引发以下异常:
Cannot use a expression of type 'EnumerateType' for the returned value type 'System.Object'
为什么会这样呢?为了能够为枚举创建lambda表达式(我认为枚举内部是整数),我应该怎么做才能解决它呢?
谢谢。
编辑:我注意到它也会崩溃任何 DateTime 属性。