NHibernate 2.1: ОСТАВЛЕННОЕ СОЕДИНЕНИЕ на SubQuery с псевдонимом (ICriteria)

Лично, я не продаюсь на WF. Это - полноценность, не было так же очевидно для меня как другие новые технологии MS, как WPF или WCF.

я думаю, что WF будет использоваться в большой степени в бизнес-приложениях в будущем, но у меня нет планов использовать его, потому что это не походит на правильный инструмент для задания для моих проектов.

6
задан Raif Atef 3 September 2009 в 14:35
поделиться

1 ответ

К сожалению, критерии немного ограничены.

Попробуйте следующее:

session.CreateCriteria(typeof(SomeTable), "st")
  .SetProjection( Projections.ProjectionList()
    .Add(Projections.GroupProperty("st.id"))
    .Add(Projections.GroupProperty("st.NonAggregateColumn"))
    .Add(Projections.RowCount(), "rowcount")
    .Add(Projections.Avg("at.YetAnotherNonAggregate"), "avg"));
  .CreateCriteria( "st.OtherTables", "at", JoinType.InnerJoin)
  .List<object[]>();

Возможно, вам нужно немного поиграть, это скорее предположение. Это также может оказаться невозможным.

Результат должен быть примерно таким:

select
  st.id,
  st.NonAggregateColumn,
  count() as "rowcount",
  avg(at.YetAnotherNonAggregate) as "avg"
from
  SomeTable st inner join AnotherTable at on ...
group by
  st.id,
  st.NonAggregateColumn

Обычно:

  • Вы можете создавать подзапросы, используя DetachedCriteria . Подробнее см. в документации .
  • Вы не можете создать декартово произведение с критериями и фильтром в предложении where. (Это работает только с HQL.)
  • Подзапросы нельзя добавлять в предложение from (так как это приведет к декартовому произведению). Вы можете поместить их только в предложение where ( в , exists и т. Д.)
  • Вы, вероятно, могли бы начать с AnotherTable и перейти к SomeTable . Это могло бы быть альтернативным решением.
2
ответ дан 17 December 2019 в 20:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: