2017-07-19 47 views
0

我有一个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来做到这一点?

回答

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); 
+0

谢谢您回答:) –