簡體   English   中英

跳過並獲取可為空/可選參數

[英]Skip and Take for nullable / optional parameters

我有一個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是否沒有優雅的方法來做到這一點?

我不明白您為什么認為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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM