1

T-SQL で次のようなグループ化集計を実行する必要があります。

select b.Name as [Grouped Name],
COUNT(distinct a.ID) as [Grouped Count], 
COUNT(distinct c1.ID) as [Second Group Count], 
COUNT(distinct c2.ID) as [Third Group Count]
from TableA a
left join TableB b on a.ID = b.TableAID
left join TableC c1 on a.ID = c1.TableAID and c1.SomeCondition = 1
left join TableC c2 on a.ID = c2.TableAID and c2.SomeCondition = 2
group by b.Name
order by b.Name

オブジェクト モデルを構築し、それを NH3 を使用してマップし、この SQL 構文を構築するクエリを構築しようと何度も試みましたが、ほとんど成功していません。

これは NH3 を使用して実行できることですか? もしそうなら、LINQでそれを行う方法はありますか? または基準API?またはHQL?

この時点で、私は何に対してもオープンです。私がこれまでに行ったすべてのうさぎの穴は私をどこにも導いていないので、私はただ正しい方向に向けられる必要があります.

これまでに試したLINQは次のとおりです。

//act
var query = from a in session.Query<TableA>()
    orderby a.TableB.Name
    select
        new
        {
            Grouped Name = a.TableB.Name,
            GroupedCount = a.Count(),
            SecondGroupCount = a.TableC.Count(c => c.SomeCondition == 1),
            ThirdGroupCount = a.TableC.Count(c => c.SomeCondition == 2),
        };

var results1 = query.ToList();

group by でも試してみましたが、何をしても、複数の集計で TableC を参照すると、NH3 は常に例外をスローします。集計が 1 つしかない場合、クエリが実行されます。2 つの集計でそれを実行しようとすると、例外が発生します。

4

1 に答える 1

1

HQLはおそらく行く方法です。Linq はリークが多すぎます。Criteria は冗長すぎます。

次のようなもの:

select b.Name as [Grouped Name],
COUNT(distinct a.id) as [Grouped Count], 
COUNT(distinct c1.id) as [Second Group Count], 
COUNT(distinct c2.id) as [Third Group Count]
from TableA a
left join a.TableB b
left join a.TableC c1 with c1.SomeCondition = 1
left join a.TableC c2 with c2.SomeCondition = 2
group by b.Name
order by b.Name

これは SQL とほぼ同じですが、結合に微調整が加えられています。TableC への二重結合が機能するかどうかは完全にはわかりませんが、試してみても問題ありません。

いずれにしても、SQL が機能する場合は、使用をやめる必要はありません... CreateSQLQuery は常に機能します。

于 2010-10-28T01:27:14.633 に答える