我創建了一個擴展方法分享我的分頁方法,擴展方法是:尋呼使用包括在LINQ到實體不起作用
public static CustomPaginateResult<TEntity> Paginate<TEntity>(this IPagination pagination,
PaginateQueryParameters parameters, IQueryable<TEntity> collection, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy)
where TEntity : class
{
var totalRows = collection.Count();
var totalPages = (int)Math.Ceiling((double)totalRows/parameters.Rows);
var query = collection.Take(parameters.Rows);
var results = orderBy(query)
.Skip(parameters.Page * parameters.Rows)
.ToList();
var result = new CustomPaginateResult<TEntity>()
{
PageSize = parameters.Rows,
TotalRows = totalRows,
TotalPages = totalPages,
CurrentPage = parameters.Page,
Results = results
};
return result;
}
當我把這種方法,如果IQueryable的集合不包括任何「包含」這工作正常,但是,如果我使用任何「包含」,我只能獲取第一頁的數據,但對於下面的頁面,這不會返回數據。我得到的是生成的查詢,並且我發現在子查詢中存在頂級的clausule,我認爲這是問題!
良好的通話:
var data = _programRepository.Paginate(new PaginateQueryParameters(page, rows),_programRepository.GetAll(), order => order.OrderBy(c => c.Id));
壞電話:
var data = _programRepository.Paginate(new PaginateQueryParameters(page, rows),_programRepository.GetAll("CategoriaPrograma"), order => order.OrderBy(c => c.Id));
而且一個查詢例如對於不好的情況下:
SELECT *
FROM (SELECT TOP (50) *
FROM [dbo].[Sesion] AS [c]) AS [Limit1]
LEFT OUTER JOIN [dbo].[Modulo] AS [Extent2] ON [Limit1].[ModuloId] = [Extent2].[Id]
ORDER BY [Limit1].[Id] ASC
任何人都可以幫我嗎?
你確定parameters.Rows定義? – Hogan
@GertArnold orderBy不是一個序列,它是一個函數。 – Hogan
嗨@霍根,是的,參數。行被定義並且具有值 –