У меня есть странное требование, которое мои клиенты навязали мне. У них есть определенные запросы, которые они потратили много времени на оптимизацию этой работы следующим образом:
- Хранимая процедура создает «список идентификаторов», который в основном представляет фильтр «Где»
- Идентификационный список объединен с вашими таблицами данных
Идентификационный список будет выглядеть примерно так
IdListTable.Customers_Id
1087,
10094,
87,
1077
Запрос на присоединение выглядит следующим образом:
SELECT c.Id, c.FirstName, c.LastName
FROM Customers c INNER JOIN IdListTable idList ON (c.Id = idList.Customers_Id);
Я бы хотел иметь возможность сделать что-то подобное в NHibernate
IEnumerable<Customer> GetMatching(Specification spec) {
string idListName = "IdListTable";
_idListGenerator.BuildIdList(idListName);
return _session.CreateCriteria<Customer>().
Add(new JoinIdListCriterion(idListName)
.Enumerable<Customer>()
}
Итак, в первую очередь, это правильная концепция? Хочу ли я реализовать свой собственный критерий ICriterion или это вообще что-то другое?
Во-вторых, как мне на самом деле это сделать. Я пытался реализовать AbstractCriterion и читать комментарии к документам, и я просто не уверен, где бы я мог подключиться к процессу построения запроса.