Всем привет.
переписываю тут проект на EF. Столкнулся с проблемой, которую никак не могу придумать как решить.
Есть запрос, в который в WHERE подставляется условие в зависимости от того, хотим ли мы сделать выборку по аккаунту, или по группе пользователей или по пользователю.
В примере который я приведу ниже, этот запрос обращается к таблице Table1, но таких таблиц около 30 и каждый раз запрос разный, ответ БД (структура) разные, но условие WHERE одно и то же.
Сейчас в программе в каждом контроллере идет вызов функции GetWhere, которая в зависимости от параметров формирует строку, которая подставляется в один из 30+ запросов (их значительно больше 30, думаю что не меньше 200).
И я не знаю как это переписать универсально, с тем чтобы осталось какое то подобие GetWhere, одинаково подходящее к всем переписанным запросам.
Если фильтровать после основного запроса структуру вида IQuerable то вылезают ошибки изза неизвестных типов. В общем я не особо профессионал, но как-то проблему надо решить, не хочется этот момент каждый раз делать руками...
SELECT a.StrParam1, a.StrParam2, SUM(a.IntParam1), SUM(a.IntParam2), MIN(a.ID),
MIN(a.Date1), MIN(a.StrParam3),
NULL, MIN(u.StrParam4), MIN(u.StrParam5), MIN(u.ID) FROM Table1 AS a
INNER JOIN Users AS u ON a.UserID=u.ID
WHERE " & WhereString1 & " AND (a.Date1 BETWEEN @datefrom AND @dateto) AND (u.Removed IS NULL)
GROUP BY a.StrParam1, a.StrParam2
ORDER BY SUM(a.IntParam1) DESC;
Вот тут WhereString1 мы заменяем на один из трех вариантов:
Если выборка по аккаунту:
u.AccountID=0
Если выборка по списку ID пользователей:
u.ID IN (1,2,3,4,5,6...)
Если выборка по списку групп:
u.GroupID IN (11,12,13,14,15...)