Задача : Получить список с фильтрами (если заданы)
Как сказали модель объекта будет приходить с фронта в get запросе
На проекте 3tier архитектура.
Есть в репозитории метод который возвращает по придикату то, что нужно, т.е. список
Код метода с репозиторияpublic async Task<List<T>> GetWithPredicate(Expression<Func<T, bool>>? predicate = null,
Func<IQueryable<T>, IOrderedQueryable<T>>? order = null,
Func<IQueryable<T>, IIncludableQueryable<T, object>>? include = null,
CancellationToken cancellationToken = default)
{
IQueryable<T> query = _dbSet;
if (include != null)
{
query = include(query);
}
if (predicate != null)
{
query = query.Where(predicate);
}
if (order != null)
{
return await order(query).ToListAsync(cancellationToken: cancellationToken);
}
else
{
return await query.ToListAsync(cancellationToken: cancellationToken);
}
}
Окей, засовываем предикат и будет радость.
Но каким образом его в сервисе сформировать, ровно как и include и order?
Если придет модель с 1 заполненным полем (условным Name), а остальные пустые, предикат будет сверять нулл и в итоге ничего не отдаст с запроса
Общая логика такова GET запрос на котроллер который принимает модель => котроллер вызывает метод сервиса и отдает модель в аргументы => ??? => идет вызов метода репозитория с указанными аргументами
Как сформировать пропущенное звено?