Фильтрация списка из базы данных с помощью Func (C#)
уважаемые форумчане!
Сломал я уже себе всю голову, нужна ваша помощь, никак не могу разобраться )
Имеется интерфейс IClientService
public interface IClientService{
Task<List<Client>> SearchClientsByPhone(string phone);
Task<List<Client>> SearchClientsByName(string name);}
А так же класс, который его реализует
public class ClientService : IClientService{
private readonly ApplicationContext _context;
public ClientService(ApplicationContext context)
{
_context = context;
}
public async Task<List<Client>> SearchClientsByPhone(string phone)
=> await SearchClients(x => x.Phone.StartsWith(phone));
public async Task<List<Client>> SearchClientsByName(string name)
=> await SearchClients(x => x.Name.StartsWith(name));
private async Task<List<Client>> SearchClients(Expression<Func<Client, bool>> filter)
=> await _context.Clients.Where(filter).AsNoTracking().ToListAsync();}
А так же сама команда вызова
public async Task SearchParameters()
{
List<Client> result;
if (_searchName)
result = await _clientService.SearchClientsByName(_searchString);
else
result = await _clientService.SearchClientsByPhone(_searchString);
Clients = new ObservableCollection<Client>(result);
}
Clients - коллекция, которую отображает ListBox.
Имеется 1 общее поле и параметры для фильтрации. Поиск осуществляется по 1 из 3 параметров:
- По номеру телефона
- По имени
- По гос.номеру
А так же, дополнительно, можно указать промежуток времени, за который осуществлять поиск. От одной даты до другой. Если посмотреть на класс ClientService, то мы увидим, что с первыми 2 пунктами проблем не возникло, т.к. данные находятся в таблице Client. Данные гос.номера находятся в таблице Vehicle. Связь один Client к многим Vehicle Данные о визите находятся в таблице Visit. Связь один Vehicle к многим Visit.
Подскажите, пожалуйста, как правильно реализовать фильтрацию по гос.номеру и разным временным промежуткам, чтобы в конечном итоге в список клиентов попали именно те клиенты, которых мы отфильтровали по параметрам. При этом, временные промежутки могут быть не указаны, значит поиск происходит по всей таблице.
Интересует именно реализация, которая в классе ClientService, используя Func и остальное.
Пожалуйста, подкиньте пару идей, как это можно сделать, или покажите пример частичной реализации.
Буду безмерно благодарен! Спасибо....