类型'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 的情况下以通用方式替换 Queryable<T> 中的列
如何在运行时设置类型时使用 Queryable.Where?