Вот мой сценарий:
Я реализовал заданную логику в моей среде 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. Я хочу сделать инфраструктуру достаточно гибкой, чтобы разработчик мог использовать различные условия для создания наборов.