mssql->entity framework
От: dmitry251  
Дата: 24.09.24 13:27
Оценка:
Всем привет.
переписываю тут проект на 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...)
Отредактировано 24.09.2024 13:28 dmitry251 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.