nhibernate - 使用连接表的别名创建 SqlProjection

标签 nhibernate criteria

我有这种情况:

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

谢谢,
丹尼尔

最佳答案

numerical_answer不会出现在您的查询中的其他任何地方,您可以跳过表名,例如

"count (case numerical_answer when 1 then 1 when -1 then 1 else null end) as YesAnswers"

关于nhibernate - 使用连接表的别名创建 SqlProjection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5591378/

相关文章:

grails - 当hasMany没有任何元素时,选择Grails条件

vb.net - 如何告诉 Fluent NHibernate 在不进行自动映射的情况下忽略特定属性?

c# - 从 NHibernate 获取 {"could not execute batch command.[SQL: SQL not available]"} 错误

mysql - ORDER BY 最大值与分组依据

java - 如何为父类(super class)编写 Hibernate Criteria 查询并检查某个子类?

java - Hibernate:使用条件按列表过滤

java - Hibernate 标准 MAX 或 SUM

c# - 行计数

NHibernate LazyInitializationException .. 如何防止?

mysql - 为什么我使用 nhibernate 的 asp.net-mvc 站点会停止更新和删除?