2017-07-19 41 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

謝謝您回答:) –