跳过并取出可空/可选参数

时间:2017-07-19 12:03:36

标签: c# .net linq

我有一个REST API,它有一些可用于分页的可选参数。 既然有可空,我就写了这段代码

public async Task<DataResult<List<ItemDTO>>> GetItem( int? skip, int? top)
{
    var result = await _itemRepository.FilterManyAsync();

    if (skip.HasValue)
        result.Entities = result.Entities.Skip(skip.Value);
    if (top.HasValue)
        result.Entities = result.Entities.Take(top.Value);
}

但LINQ没有优雅的方法来做到这一点吗?

1 个答案:

答案 0 :(得分:2)

我不明白为什么你认为linq有这样的功能。您当然应首先检查参数是否一个值,如果是,请执行操作,在您的情况下跳过或执行。

但是你可以为此创建自己的扩展名:

IEnumerable<T> SkipOrAll(this IEnumerable<T> src, int? skip)
{
    return skip.HasValue ? src.Skip(skip) : src;
}

TakeOrAll的等价物:

IEnumerable<T> TakeOrAll(this IEnumerable<T> src, int? take)
{
    return take.HasValue ? src.Take(take) : src;
}

这很容易被称为:

var result = source.SkipOrAll(skip).TakeOrAll(take);