类型'Queryable'上的通用方法'OrderBy'与提供的类型参数不兼容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类型'Queryable'上的通用方法'OrderBy'与提供的类型参数不兼容相关的知识,希望对你有一定的参考价值。

我正在编写一些将修改表达式的代码,以使其中包含的子查询得到排序。

我在SO上找到了类似的代码:https://stackoverflow.com/a/1379693/509464但这对我没有用我也尝试查看this答案,但无法将其应用于我的代码段

类型为'Queryable'的通用方法'OrderBy'与提供的类型实参和实参不兼容。如果该方法是非泛型的,则不应该提供任何类型参数。

          MethodCallExpression orderByCallExpression = Expression.Call(
                    typeof(Queryable),
                    "OrderBy"/*Descending*/,
                    new Type[] { typeof(TSource), filterpart.OrderOverPropertyGetterValueType},
                    navigationalProperty.Body,
                    filterpart.OrderOverPropertyGetter);                            

我正在尝试找出2个类型参数或2个其他参数中的哪个导致此错误。

  • OrderOverPropertyGetterValueType在此只是typeof(DateTime)案例
  • TSource是实体类型(礼物)
  • navigationalProperty.Body包含{source.Gifts.AsQueryable()},其表达式类型为:System.Linq.Expressions.MethodCallExpression
  • filterpart.OrderOverPropertyGetter包含表达式类型为{g => g.Date}System.Linq.Expressions.Expression<System.Func<Gift,System.DateTime>>

我不知道如何诊断四个参数中的哪一个是不正确的,我认为其中一种表达式类型可能不正确...

答案

我的类型定义是错误的,如错误提示所示。

[typeof(TSource)必须为typeof(TNav),因为我们要订购source.Gifts

以上是关于类型'Queryable'上的通用方法'OrderBy'与提供的类型参数不兼容的主要内容,如果未能解决你的问题,请参考以下文章

从 Queryable 中获取 Where 方法

如何在不执行 Queryable 的情况下以通用方式替换 Queryable<T> 中的列

(TS)通用类型'主题 '需要1种类型的参数

如何在运行时设置类型时使用 Queryable.Where?

无法转换'NSFetchRequest类型的值 '到指定类型'NSFetchRequest “

没有自定义帖子类型 slug 的 WordPress slug