Я прихожу так поздно, и у меня нет шансов на повышение, но есть отличное решение, которое я не видел, рассматривал: комбинацию процедуры / функции с linq-to-object. Или to-xml или to-datatable, я полагаю.
Я был именно в этой ситуации, с массивным динамически построенным запросом, который был своего рода впечатляющим достижением, но сложность которого обернулась кошмарным сном. У меня было так много зеленых комментариев, чтобы помочь бедному соку, который должен был прийти позже и понять это. Я был в классическом осле, поэтому у меня было мало альтернатив.
С тех пор я сделал комбинацию функция / процедура и linq . Часто общая сложность меньше, чем сложность попытки сделать это в одном месте. Передайте некоторые из ваших критериев в UDF, которая станет намного более управляемой. Это дает вам управляемый и понятный набор результатов. Примените оставшиеся различия, используя linq.
Вы можете использовать преимущества обоих:
- Сократить общее количество записей
возможно на сервере; получить как можно больше
сумасшедшие соединения позаботились о
сервер. Базы данных хороши на этом
прочее.
- Линк (к объекту и т. Д.) Не так силен, но отлично подходит для выражения сложных критериев; поэтому используйте его для различных возможных различий, которые усложняют код, но при этом обработка базы данных не будет намного лучше. Работая на сокращенном, нормализованном наборе результатов, linq может выразить соответствие без особых потерь производительности.
Как решить, какие критерии обрабатывать в БД, а какие с помощью linq? Используйте свое суждение. Если вы можете эффективно обрабатывать сложные запросы БД, вы можете справиться с этим. Часть искусства, часть науки.