的别名SqlProjection我有这种情况:创建连接表
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} .numerical_answer不工作,{别名}引用AnswerSet。
的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
谢谢
丹尼尔
这样做是等待发生的灾难。这可以在今天使用,但是当稍后将新列添加到数据库时,可能会在没有人注意的情况下中断该查询。看看这里:http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/10/25/defensive-database-programming-qualifying-column-names.aspx – Alejandro 2016-06-29 17:12:32
有效的关注。截至今天,我可能会解决这个问题,通过使用QueryOver并在代码中计算所需的结果,而不是首先有很多魔术字符串。 – 2016-07-18 09:33:41