我有以下代码:
public static IQueryable<T> ApplyOrdering<T>(this IQueryable<T> query, IQueryObject queryObject, Dictionary<string, Expression<Func<T, Object>>> columnsMap)
{
if (String.IsNullOrWhiteSpace(queryObject.SortBy) || !columnsMap.ContainsKey(queryObject.SortBy))
return query;
if (queryObject.IsSortAscending)
return query.OrderBy(columnsMap[queryObject.SortBy]);
else
return query.OrderByDescending(columnsMap[queryObject.SortBy]);
}
但如果字典中的对象是日期,我会收到以下错误:
无法将类型'System.DateTime'强制转换为'System.Object'。 LINQ to Entities仅支持转换EDM原语或枚举类型。
这是我通过调用上述扩展方法的columnsMap的代码:
var columnsMap = new Dictionary<string, Expression<Func<Post, Object>>>
{
["createdDate"] = p => p.CreatedDate
};
query = query.ApplyOrdering(queryObject, columnsMap);
我该如何解决?
答案 0 :(得分:0)
我认为问题出在Expression<Func<T, Object>>> columnsMap
DateTime
不是一个类,是一个结构,所以如果你的签名等待一个Object而你传递一个原始类型,它会抛出异常。
但是,此刻我不知道如何解决它。
答案 1 :(得分:0)
可能是Expression<>
的原因,您应该使用Func<>
。看看我的答案。