Как использовать массив params перечисления и использовать как параметр запроса в c#? - PullRequest
0 голосов
/ 18 июня 2020

В моем проекте as pnet core 3.1 я использую шаблон CQRS, я хотел бы реализовать массив params перечисления. Ошибка компилятора отсутствует, но я все еще не получаю результата.

Мой конструктор выглядит так:

..... other fields
public DateTime? UpdatedAt { get; set; }
public ProjectStatus?[] Statuses { get; set; }

public Query(...., DateTime? updatedAt, params ProjectStatus?[] statuses)
{
   ......
    UpdatedAt = updatedAt;
    Statuses = statuses;
}

Мой обработчик запросов выглядит так:

var queryable = _context.Projects.AsQueryable();

             .... other logics

if (request.UpdatedAt.HasValue)
    queryable = queryable.Where(x =>
        x.UpdatedAt.Value <= request.UpdatedAt.Value.AddHours(-1) &&
        request.Statuses.Contains(x.Status)); // want to use there

var projects = await queryable.Skip(request.Offset ?? 0).Take(request.Limit ?? 
50)
    .ToListAsync(cancellationToken: cancellationToken);

return new ProjectsList
{
    Data = _mapper.Map<List<Project>, List<ProjectForListDto>>(projects),
    TotalCount = await queryable.CountAsync(cancellationToken: 
   cancellationToken)
};

Мой контроллер выглядит так:

[HttpGet]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
public async Task<ActionResult<List<ProjectForListDto>>> List(int? offset, int? limit, string organizationName,
int? organizationId, ProjectStatus? status,string sortBy, string sortDirection,string search,DateTime? updatedAt)
=> Ok(await Mediator.Send(new List.Query(limit, offset, organizationName, organizationId, status,sortBy,sortDirection,search,updatedAt)));

Хотелось бы чего-то такого

{{url}}/api/projects?updatedat=2020-06-17T07:43:23.169914&statuses=1,3,5,7,10

Мой базовый контроллер для Mediatr:

    [Route("api/[controller]")]
    [ApiController]
    public class BaseController : ControllerBase
    {
        private IMediator _mediator;
        protected IMediator Mediator => _mediator ??= 
        HttpContext.RequestServices.GetService<IMediator>();
    }

PS Хотелось бы чего-нибудь попроще подход

Также найден этот но этот для веб-api

...