我在“ThenBy”部分收到此错误
Expression of type 'System.Linq.IQueryable`1 cannot be used for parameter of type 'System.Linq.IOrderedQueryable
using Newtonsoft.Json.Linq;
using Common.Constant;
using System.Collections;
using System.Linq.Expressions;
namespace Common
{
public static class LinqHelper
{
public static IOrderedQueryable<TSource> OrderByDefault<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector, bool isInitialQueryable)
{
var ordered = source as IOrderedQueryable<TSource>;
if (ordered == null || isInitialQueryable)
{
return source.OrderBy(keySelector); // <<-- no issue for this line. the system will get into here for the first column
}
else
{
return ordered.ThenBy(keySelector); // <<-- this line will prompt above error
}
}
}
}
这个想法是,系统应该能够生成排序的代码。代码运行第一个“if语句”没有问题。但在“else语句”上失败
2条答案
按热度按时间vi4fp9gy1#
由于某些原因,检查总是返回true,即可查询对象总是有序的。不是100%确定为什么会这样。也许是查询提供程序,它从一开始就将它作为有序的可查询对象生成,然后再对其执行任何其他工作。
这个方法检查queryable是否以我测试时似乎有效的方式排序:
我也尝试了一个在if语句中使用此语句的版本,但它总是在OrderBy部分结束:
btqmn9zl2#
根据Svyatoslav Danyliv的响应,我将参数从“this IQueryable source”更改为“IOrderedQueryable source”
下面是我如何使用该函数的示例