Добавление проекций в запрос nhibernate

2

Каким будет лучший способ добавить прогнозы к запросу nhibernate, который уже может или не может иметь 1 или более проекций? Вызов .SetProjection(), похоже, заменяет любые проекции, которые могут уже существовать.

Чтобы дать немного фонового контекста, я использую версию метода расширения вычисленного результата, найденного здесь, и я подошел к точке, где Я передаю запрос с отдельной проекцией, но эта проекция лишена для критериев подсчета из-за вызова .SetProjection(Projections.RowCountInt64).

Теги:
nhibernate

2 ответа

2
Лучший ответ

Я не уверен, что это сработает, потому что я не могу проверить это прямо сейчас, но почему бы вам не использовать что-то вроде ProjectionList для этого трюка?


var criteria = ...
var projectionList = Projection.ProjectionList();

// Add you projections to the projectionList
projectionList.Add(yourQueryProjection);
projectionList.Add(Projections.RowCountInt64());

criteria.setProjection(projectionList);

  • 0
    Стоит отметить, что после того, как вы решите использовать прогнозы, вы должны указать каждый столбец, который вы хотите, чтобы запрос возвращал. Мой опыт работы с NH ограничен, но пока, похоже, нет способа сообщить API-интерфейсу ICriteria, что вы хотите выбрать все столбцы, связанные с выбранным объектом, а затем добавить еще один дополнительный прогноз в запрос. но не похоже, что это будет очень сложный метод расширения для добавления в проект (или ICriteria API)
0

Я не сделал этого, поэтому вам, возможно, придется немного его переработать, но я считаю, что вы можете сделать что-то вроде

.ProjectionCriteria.Add(Projections.RowCountInt64)

Так как у него может не быть никаких проекций, вы можете проверить, что в этом случае имеет свойство ProjectionCriteria. Он может быть нулевым.

  • 0
    Я использую ICriteria, поэтому у меня нет .ProjectionCriteria для меня. Я полагаю, что мог бы передать фактическую реализацию критериев, но тогда мне понадобился бы метод расширения для каждой реализации ICreiteria. Есть еще идеи?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню