Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 1
Регистрация: 22.07.2022
Сообщений: 174

Фильтрация списка из базы данных с помощью Func

30.10.2023, 01:35. Показов 501. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, уважаемые форумчане!

Сломал я уже себе всю голову, нужна ваша помощь, никак не могу разобраться )


Имеется интерфейс IClientService

C#
1
2
3
4
5
6
public interface IClientService
{
    Task<List<Client>> SearchClientsByPhone(string phone);
 
    Task<List<Client>> SearchClientsByName(string name);
}
А так же класс, который его реализует


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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();
 
}

А так же сама команда вызова


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[ObservableProperty] private ObservableCollection<Client> _clients = new();
[ObservableProperty] private bool _searchTelephone = true;
[ObservableProperty] private bool _searchName = false;
[ObservableProperty] private bool _searchStateNumber = false;
[ObservableProperty] private string? _searchString = null;
 
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 параметров:
1) По номеру телефона
2) По имени
3) По гос.номеру

А так же, дополнительно, можно указать промежуток времени, за который осуществлять поиск.
От одной даты до другой.
Если посмотреть на класс ClientService, то мы увидим, что с первыми 2 пунктами проблем не возникло, т.к. данные находятся
в таблице Client.
Данные гос.номера находятся в таблице Vehicle. Связь один Client к многим Vehicle
Данные о визите находятся в таблице Visit. Связь один Vehicle к многим Visit.

Подскажите, пожалуйста, как правильно реализовать фильтрацию по гос.номеру и разным временным промежуткам, чтобы в конечном итоге в список клиентов попали именно те клиенты, которых мы отфильтровали по параметрам.
При этом, временные промежутки могут быть не указаны, значит поиск происходит по всей таблице.

Интересует именно реализация, которая в классе ClientService, используя Func и остальное.

Пожалуйста, подкиньте пару идей, как это можно сделать, или покажите пример частичной реализации.

Буду безмерно благодарен! Спасибо....
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.10.2023, 01:35
Ответы с готовыми решениями:

Выбирать название таблицы из базы данных с помощью выпадающего списка
Доброго времени суток! Возникла вот такого рода задача: Реализуйте WinForms приложение, позволяющее пользователю выбирать...

Фильтрация базы данных
Здравствуйте, подскажите плз. как в dbgrideh (access) сделать фильтрацию (комбобокс) по табличке Категории, например есть таблица из 3...

Фильтрация базы данных
как сделать фильтрацию в БД используя DBComboBox и Edit???

1
91 / 65 / 18
Регистрация: 09.12.2015
Сообщений: 211
31.10.2023, 13:39
Через and: phone and name and stateNumber.
Делайте метод, который будет принимать на вход несколько параметров. Или функцию, через как раз Func, которая будет осуществлять поиск по набору параметров.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.10.2023, 13:39
Помогаю со студенческими работами здесь

Фильтрация базы данных
Выдает ошибку Fatal error: Uncaught Error: Call to a member function execute() on bool in C:\xampp\htdocs\LR2\logic.php:32 Stack trace: #0...

Фильтрация Базы Данных
Как создать SQL запрос на фильтрацию по полю. Понял только что его в аксесе нужно делать. Но как, без понятия

Фильтрация из базы данных WPF
Все типы из базы данных должны быть выведены в выпадающий список для фильтрации. Первым элементом в выпадающем списке должен быть “Все...

Фильтрация базы данных по названию города
Друзья,большая просьба,помогите пожалуйста написать процедуру фильтрации в базе данных. Имеется база данных и нужно отфильтровать все...

Фильтрация в php при выводе данных из базы
Здравствуйте дорогие друзья ! Я новичок в php. Если честно долго мучиться тоже не стал, а решил сразу спросить у вас. Есть веб приложение....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru