Re: Сложная выборка
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.12.24 03:11
Оценка: 5 (1) +2
Здравствуйте, peer, Вы писали:

P>Привет


P>Есть приложение .net + mssql и есть таблица с 50 полями и нужно сделать выборку из этой таблицы на основании фильтра который состоит из 15 параметров (поля этой таблицы)

P>Можно конечно сделать перебор всех параметров фильтра типа
P>
P>if (filter.Param1 != null)
P>   context.Entities.Where(a => a.Param1 = filter.Param1)
P>if (filter.Param2 != null)
P>   context.Entities.Where(a => a.Param2 = filter.Param2)
P>

Я не эксперт по EF, но код выглядит некорректным.
Вы, наверное, имели в виду что-то вроде:
var source = context.Entities;
if (filter.Param1 != null)
   source = source.Where(a => a.Param1 = filter.Param1);
if (filter.Param2 != null)
   source = source.Where(a => a.Param2 = filter.Param2);
...

Это вполне себе элегантно. Более элегантные вещи потребуют метапрограммирования, и оправданы тогда, когда у вас есть более-менее сложная модель. Например, у вас таких таблиц по 15 полей — много, и поддерживать вручную все вот эти N*M if (filter.StartDate != null) становится трудно. Тогда можно навелосипедить кодогенерацию, которая
1. Порождает классы фильтров для каждой Entity
2. Порождает код по генерации предиката для Entity на основе созданного для неё фильтра
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.