0

質問:

次のクエリを生成できる基準/予測は何ですか?

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ソースコードから明らかですが、役に立ちません。もしそうなら

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非常に疑わしく見えます。

4

1 に答える 1

0

これは機能するはずです (ただし、SUBSTRING(Name, 1, 1) が必要な場合もありますが、とにかく):

Projections.SqlGroupProjection(
    "SUBSTRING(Name, 0, 1) as FirstChar",
    "SUBSTRING(Name, 0, 1)",
    new [] {"FirstChar"}, 
    new[] {NHibernateUtil.String}
)
于 2012-05-22T09:07:27.787 に答える