问题:
可以生成以下查询的条件/预测是什么?
SELECT SUBSTRING(Name, 0, 1) FROM Person GROUP BY SUBSTRING(Name, 0, 1)
(显然DISTINCT
这个更容易,但我稍后需要计数,当我解决这个问题时)。
<小时/> 我的方法:
我的主要问题是常量,因为如果我使用
Projections.GroupProperty(Projections.SqlFunction(
"SUBSTRING",
NHibernateUtil.String,
Projections.GroupProperty("Name"),
Projections.Constant(0),
Projections.Constant(1)
))
我得到了
SELECT SUBSTRING(Name, 0, 1) FROM Person GROUP BY SUBSTRING(Name, , )
从NH source code显而易见,但没用。 如果我做了
Projections.GroupProperty(Projections.SqlFunction(
"SUBSTRING",
NHibernateUtil.String,
Projections.GroupProperty("Name"),
Projections.GroupProperty(Projections.Constant(0)),
Projections.GroupProperty(Projections.Constant(1))
))
然后我得到
SELECT SUBSTRING(Name, @p0, @p1) FROM Person GROUP BY SUBSTRING(Name, ?, ?)
其中问号似乎是一些未解决的参数,但我不知道为什么。
<小时/> 更多详情:
我刚刚找到
AbstractEntityJoinWalker.InitProjection(
SqlString projectionString,
SqlString whereString,
SqlString orderByString,
string /* WTF? */ groupByString,
SqlString havingString,
LockMode lockMode
)
groupByString
的类型看起来非常可疑。
答案 0 :(得分:0)
这应该有效(尽管你可能想要SUBSTRING(Name,1,1)但是无论如何):
Projections.SqlGroupProjection(
"SUBSTRING(Name, 0, 1) as FirstChar",
"SUBSTRING(Name, 0, 1)",
new [] {"FirstChar"},
new[] {NHibernateUtil.String}
)