Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跳过并获取可为空/可选参数_C#_.net_Linq - Fatal编程技术网

C# 跳过并获取可为空/可选参数

C# 跳过并获取可为空/可选参数,c#,.net,linq,C#,.net,Linq,我有一个RESTAPI,它有一些可选参数,可以用于分页。 因为有空值,所以我编写了这个代码序列 public async Task<DataResult<List<ItemDTO>>> GetItem( int? skip, int? top) { var result = await _itemRepository.FilterManyAsync(); if (skip.HasValue) result.Entities =

我有一个RESTAPI,它有一些可选参数,可以用于分页。 因为有空值,所以我编写了这个代码序列

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);
}
public异步任务GetItem(int?skip,int?top)
{
var result=await_itemRepository.FilterManyAsync();
if(跳过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;
}
这可以简单地称为:

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

我不明白你为什么认为linq有这样的特点。当然,您应该首先检查您的参数是否有值,如果有,则执行该操作,在您的情况下是跳过还是执行

但是,您可以为此创建自己的扩展:

IEnumerable<T> SkipOrAll(this IEnumerable<T> src, int? skip)
{
    return skip.HasValue ? src.Skip(skip) : src;
}
这可以简单地称为:

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

谢谢你的回答:)谢谢你的回答:)