我有:
IQueryable<T> collection
var sortSelectorParameter = Expression.Parameter(typeof(T), "c");
var sortSelector = GetPropertyOrField<T>(sortSelectorParameter, "SomeId");
collection = collection.OrderByDescending(Expression.Lambda<Func<T, object>>(sortSelector, sortSelectorParameter));
如果参数(SomeId)是一个字符串,这可以正常工作。但是,如果它是一个整数(或者可能是其他类型),那么我会得到一个异常,说它不能将int转换为对象。
如果我尝试Expression.Convert
我稍后会说实体框架无法将其转换为字符串,因为它不支持转换。
如果我将Expression.Lambda<Func<T, object>>
更改为Expression.Lambda<Func<T, int>>
,那么它可以完美地运行,但仅适用于整数属性。
我不知道如何使用一些怪异的switch语句来支持所有类型。任何人都可以就此提出任何建议吗?