我在asp.net核心中使用存储库模式使用通用过滤器/排序。请继续获取错误
无法转换类型为'Microsoft.EntityFrameworkCore.Internal.InternalDbSet'1 [Data.Models.AdminRole]'的对象来键入'System.Linq.IOrderedQueryable'1 [Data.Models.AdminRole]'。
public virtual async Task<ICollection<T>> SearchAsync(SearchQuery<T> searchQuery)
{
IQueryable<T> sequence = _entities.Set<T>();
sequence = ManageFilters(searchQuery);
sequence = ManageIncludeProperties(searchQuery, sequence);
sequence = ManageSortCriterias(searchQuery, sequence);
return await GetTheResult(searchQuery, sequence);
}
错误出现在下面的代码entity =((IOrderedQueryable<T>)entity).OrderBy(x => (true));
的else部分中。由于ManageFilters
中的序列未如屏幕截图所示转换为查询。
protected virtual IQueryable<T> ManageSortCriterias(SearchQuery<T> searchQuery, IQueryable<T> entity)
{
if (searchQuery.SortCriterias != null && searchQuery.SortCriterias.Count > 0)
{
var sortCriteria = searchQuery.SortCriterias[0];
var orderedSequence = sortCriteria.ApplyOrdering(entity, false);
if (searchQuery.SortCriterias.Count > 1)
{
for (var i = 1; i < searchQuery.SortCriterias.Count; i++)
{
var sc = searchQuery.SortCriterias[i];
orderedSequence = sc.ApplyOrdering(orderedSequence, true);
}
}
entity = orderedSequence;
}
else
{
entity = ((IOrderedQueryable<T>)entity).OrderBy(x => (true));
}
return entity;
}
管理过滤器。因为当我没有任何过滤器时,条件会转到else部分,然后在ManageSortCriterias
方法else部分中产生错误。
protected virtual IQueryable<T> ManageFilters(SearchQuery<T> searchQuery)
{
IQueryable<T> sequence = _entities.Set<T>();
if (searchQuery.Filters != null && searchQuery.Filters.Count > 0)
{
foreach (var filterClause in searchQuery.Filters)
{
sequence = _entities.Set<T>().Where(filterClause);
}
}
return sequence;
}
下面的屏幕快照显示了内部的序列数据。