Создать SqlProjection с псевдонимом объединенной таблицы - PullRequest
7 голосов
/ 08 апреля 2011

У меня такая ситуация:

public class AnswerSet {
public virtual IList<Answer> Answers {set; get;}
}

session.CreateCriteria<AnswerSet>()
        .CreateAlias( "Answers", "a" )
        .SetProjection( Projections.ProjectionList()
          .Add( Projections.GroupProperty( "TopicId" ), "TopicId" )
          .Add( Projections.GroupProperty( "TopicName" ), "TopicName" )
          .Add( Projections.SqlProjection( "count (case **{a}**.numerical_answer
when 1 then 1 when -1 then 1 else null end) as YesAnswers",
         new[] { "YesAnswers" }, new IType[] { NHibernateUtil.Int32 } ), "YesAnswers" )

Как указать псевдоним дочерней коллекции? {a} .numeric_answer не работает, а {псевдоним} относится к набору ответов.

SQL-эквивалент

select
      [as].topic_id as TopicId
      , [as].topic_name as TopicName
      , count (case [a].numerical_answer
               when 1 then 1
               when -1 then 1
               else null
               end) as YesAnswers
from answer_set [as] join answer [a] on [a].answer_set_id = [as].id

Спасибо,
Daniel

Ответы [ 2 ]

4 голосов
/ 08 апреля 2011

Если numerical_answer не отображается нигде в вашем запросе, вы можете просто пропустить имя таблицы, например,

"count (case numerical_answer when 1 then 1 when -1 then 1 else null end) as YesAnswers"
0 голосов
/ 20 августа 2016

Я знаю, что уже поздно, но надеюсь, что это кому-нибудь поможет.Я понял это из кода, в котором NHiberate переименовывает псевдонимы для объединяемых таблиц при генерации SQL.

Каждый псевдоним проекции дополнен индексом псевдонима и _.

Так в вашемВ этом случае вы можете использовать

a1_.numerical_answer

Если вы добавили больше псевдонимов, вы можете использовать их в проекциях SQL следующим образом:

b2_.some_property, c3_.another_property, etc.

Обратите внимание, что порядок имеет значение, в котором создаются псевдонимы,В моем случае у меня была таблица со многими объединениями в определенном пользователем порядке и порядке, поэтому мне нужно было прибегнуть к этому, и он прекрасно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...