5

我正在编写一些代码来修改表达式,以便对其中包含的子查询进行排序。

我在 SO 上找到了类似的代码,但它对我不起作用。我也尝试查看答案,但无法将其应用于我的代码

'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是一个实体类型 ( Gifts)
  • navigationalProperty.Body包含source.Gifts.AsQueryable()具有表达式类型的 { }:System.Linq.Expressions.MethodCallExpression
  • filterpart.OrderOverPropertyGetter包含{g => g.Date}表达式类型System.Linq.Expressions.Expression<System.Func<Gift,System.DateTime>>

我不知道如何诊断四个参数中的哪个参数不正确。我在想其中一种表达式类型可能不正确。

4

1 回答 1

1

正如错误提示的那样,我的类型定义是错误的。

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

于 2013-07-30T13:08:50.130 回答