如果条件存在,我只想将skip()应用于我的IQueryable
有一个肮脏的解决方案
if (currentPage!=1){
query=query.skip(PageSize*currentPage-1)
}
但我不认为这是一个漂亮而优雅的代码,我需要像linq这样的扩展名。
如果条件存在,我该如何跳过? 我以错误的方式应用skip方法?
问题是如果currentPage为1,则不应该跳过第一个n页面大小记录。所以我需要用if检查条件。
// elegent方式应该是这样的
meetings = await _meetingRepository.GetAll()
.WhereIf(!input.IncludeCanceledMeetings,m=>!m.IsCancelled)
.OrderBy(input.OrderBy+" " + input.Sort)
.SkipIf(input.CurrentPage!=1,input.PageSize*input.CurrentPage-1)
.Take(input.PageSize)
.ToListAsync();
感谢
答案 0 :(得分:2)
您甚至不需要条件if (currentPage!=1)
。您可以将其写为query=query.skip(PageSize*(currentPage-1))
。让我们用常量替换变量,看看它是什么样的......
query=query.skip(10*(1-1)) // PageSize = 10, currentPage = 1
请注意括号(记住您从高中代数的操作顺序)。 1-1 = 0.任何乘以零的都是零,因此第1页的结果代码最终看起来像这样:
query=query.skip(0);
与...基本相同:
query=query;
如果currentPage
是2而不是1,那么它将如下所示:
query=query.skip(10*(2-1)) // == query=query.skip(10*1) == query=query.skip(10)