powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как написать динамическое лямбда выражение?
6 сообщений из 6, страница 1 из 1
Как написать динамическое лямбда выражение?
    #39733910
Solomka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грубо говоря, что есть постоянное выражение, если вдруг переменная равна нулю.
А если не равна нулю, то изменить эту ламбду.
Хотелось бы написать что-то подобное:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
               Expression<Func<Company, bool>> selectCompany = null;
 
                if (filter == null)
                {
                    selectCompany = x => x.CompanyId > 1;
                }
                else
                {
                    selectCompany = x => x.CompanyId > 1 ;

                    if (filter != null)
                    {
                        if (!string.IsNullOrWhiteSpace(filter.Name))
                            selectCompany = selectCompany && x => x.FullName.ToLower().Contains(filter.Name.ToLower().Trim());

                        if (!string.IsNullOrWhiteSpace(filter.Population))
                            selectCompany = selectCompany && x => x.PopulationToString.ToLower().Contains(filter.Population.ToLower().Trim());

                        if (!string.IsNullOrWhiteSpace(filter.RegionCity))
                            selectCompany = selectCompany && x => x.RegionCity.ToLower().Contains(filter.RegionCity.ToLower().Trim());
                    }
                }

                var retLst = uow.GetRepository<Company>().GetAll()                 
                   .Where(selectCompany)
                   .ToList();



Но оно не компилируется...
...
Рейтинг: 0 / 0
Как написать динамическое лямбда выражение?
    #39733924
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solomka,

Для построения динамических выражений в рантайме нужно использовать класс Expression и его статические методы.

а не вот это вот


Solomka
Код: c#
1.
selectCompany = selectCompany && x => x.FullName.ToLower().Contains(filter.Name.ToLower().Trim());



Тут задача нормально решается через IQueryable, не нужны expresisons.
...
Рейтинг: 0 / 0
Как написать динамическое лямбда выражение?
    #39733925
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как написать динамическое лямбда выражение?
    #39733926
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы - хвост прав, но всякое бывает...
...
Рейтинг: 0 / 0
Как написать динамическое лямбда выражение?
    #39741968
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solomka,

для динамических выражений хорошо подходил predicatebilder
...
Рейтинг: 0 / 0
Как написать динамическое лямбда выражение?
    #39741995
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solomka, можно не возиться с лямбдами, а просто сделать так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var q = uow.GetRepository<Company>().GetAll().Where(x => x.CompanyId > 1);

if (filter != null)
{
     if (!string.IsNullOrWhiteSpace(filter.Name))
           q = q.Where(x => x.FullName.ToLower().Contains(filter.Name.ToLower().Trim()));

     if (!string.IsNullOrWhiteSpace(filter.Population))
           q = q.Where(x => x.PopulationToString.ToLower().Contains(filter.Population.ToLower().Trim()));

     if (!string.IsNullOrWhiteSpace(filter.RegionCity))
           q = q.Where(x => x.RegionCity.ToLower().Contains(filter.RegionCity.ToLower().Trim()));
}

return q.ToList();
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как написать динамическое лямбда выражение?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]