Linq跳过,如果不是第一页

时间:2016-05-23 13:32:05

标签: c# linq

如果条件存在,我只想将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();

感谢

1 个答案:

答案 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)