Вот мой сценарий:
Я реализовал логику набора в своей структуре C#. Наборы могут содержать большое количество объектов, возможно, даже до 1 миллиона в худшем случае. Предположим, что наборы просто содержат списки объектов, называемых Doc. Из-за потенциально большого количества объектов я хотел бы дать разработчику возможность выбирать, как создавать и использовать наборы.
Для небольших наборов разработчик может просто создать новый набор и добавить в него объекты документации. Доступна обычная логика набора, такая как объединение, пересечение и т. д. Затем разработчик может в любой момент сохранить набор с моим уровнем ИЛИ, в котором набору будет назначен первичный идентификатор.
Для очень больших наборов, которые сохраняются в базе данных, я хотел бы обойти процесс извлечения идентификаторов объектов документа из базы данных, а затем сохранить идентификаторы обратно в заданный объект, разрешив манипулировать набором в SQL 2008 CLR . Я бы хотел иметь такую простую функцию, как эта подпись:
public void AddSetMembers(int setID, Expression<Func<Doc, bool>> Where)
Это позволило бы разработчику добавлять произвольные документы в набор, соответствующий выражению, без извлечения всех идентификаторов из базы данных с единственной целью добавления их в набор.
У меня вопрос: как лучше всего подойти к этой реализации в хранимой процедуре? Могу ли я каким-то образом передать лямбду в хранимую процедуру? Я думал о реализации интерфейса IDoc и загрузке его в CLR с подписью, например:
public void AddSetMembers(int setID, Expression<Func<IDoc, bool>> Where)
однако мне все равно нужно передать лямбду в SP. Я хочу сделать фреймворк достаточно гибким, чтобы разработчик мог использовать разные условия для создания наборов.





Вы можете передать строку из вашего SQL в метод SQL CLR, содержащий лямбда. Затем скомпилируйте эту строку в функцию / метод с помощью инструментов компиляции фреймворка и затем вызовите ее.
Да, я использую SQL2008 CLR. Сам набор - это постоянный объект со своей собственной таблицей, состоящей из идентификаторов установленных объектов. Я думал об использовании строки для передачи лямбда, а затем раскрытии процедуры сохранения с помощью метода, что сделало бы строку правильно типизированной лямбда.