C# 跳过并获取可为空/可选参数
我有一个RESTAPI,它有一些可选参数,可以用于分页。 因为有空值,所以我编写了这个代码序列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 =
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);
谢谢你的回答:)谢谢你的回答:)