我有一个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没有优雅的方法来做到这一点吗?
答案 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);