Если я правильно понимаю вопрос, идея состоит в том, чтобы заменить целый раздел кода на C #, отвечающий за создание "длинной руки", конкретного оператора SQL, соответствующего списку критериев поиска, одним вызовом хранимая процедура, которая на стороне SQL будет использовать общий шаблон запроса, предназначенный для единообразной обработки всех разрешенных комбинаций критериев поиска.
В дополнение к сложности сопоставления выражений, вычисляемых на стороне приложения (например, someCondition.HasValue), с выражениями, вычисляемыми на стороне SQL (например, "some-condition-value"), решение, которое вы представляете, может быть 1003 * логически / функционально эквивалентен «самодельному» оператору SQL, но медленнее и требовательнее к ресурсам SQL .
По сути, код C # инкапсулирует специфические знания о "физической" структуре базы данных и ее схеме . Он использует эту информацию, чтобы выяснить, когда может потребоваться конкретное СОЕДИНЕНИЕ или когда конкретное значение критерия поиска на уровне приложения переводится в SQL как «LIKE», а не как «=» предикат. Он также может включать в себя бизнес-правила, такие как «когда указан почтовый индекс, поиск выполняется по штату, а не по штату».
Вы вправе попытаться отделить модель данных (способ, которым приложение видит данные) от схемы данных (способ, которым она объявляется и хранится в SQL), но правильное отображение должно быть как-то сделано где-то.
Выполнение этого на уровне приложения со всей выразительной мощью C #, в отличие от T-SQL, не обязательно является плохой вещью, если это сделано
- в модуле, который не зависит от других функций приложения
и, где это возможно,
- это в некоторой степени обусловлено данными / конфигурацией, чтобы небольшие изменения в модели данных (скажем, добавление критериев поиска) могли быть реализованы путем изменения файла конфигурации вместо того, чтобы вставлять его где-то в середине длинного ряда C # условные высказывания.