无法将类型“System.DateTime”强制转换为在LINQ to Entities中键入“System.Object”

时间:2017-12-05 20:47:36

标签: c# entity-framework linq linq-to-entities

我有以下代码:

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);

我该如何解决?

2 个答案:

答案 0 :(得分:0)

我认为问题出在Expression<Func<T, Object>>> columnsMap

DateTime不是一个类,是一个结构,所以如果你的签名等待一个Object而你传递一个原始类型,它会抛出异常。

但是,此刻我不知道如何解决它。

答案 1 :(得分:0)

可能是Expression<>的原因,您应该使用Func<>。看看我的答案。

https://stackoverflow.com/a/52030539/7369310