1

私はこのコードを持っています(私はそれをテストできないのでそれが機能するかどうかわかりません):

var test = base.UnitOfWork.Session.Query<NutritionFact>()
                                  .Where(x => x.NutritionalServing.Id == servingId)
                                  .GroupBy(x => x.UserVerifiedFacts)
                                  .OrderByDescending(x => x.Sum(e => e.UserVerifiedFacts.Count()))
                                  .Take(3)
                                  .Select(r => new
                                      {
                                          c = r.Key,
                                          Sum = r.Sum(x => x.UserVerifiedFacts.Count())
                                      })
                                  .ToList();

私がやろうとしてNutritionFactsいるのは、正しいものをすべて見つけることですservingIdNutritionFacts次に、情報を確認したユーザーの数を見つけたそれぞれについて数えたいと思います。次に、上位3つの結果を取得して使用したいと思います。

私が今していることは、明らかに「実装されていない」エラーを引き起こします。これは、nhibernatesumがパラメーターを処理できないためと思われます。

ここに画像の説明を入力してください

4

1 に答える 1

2

私は試してみます:

var test = ...Query<NutritionFact>()
             .Where(x => x.NutritionalServing.Id == servingId)
             .Select(x=> new { Nf= x, VfCount= x.UserVerifiedFacts.Count() })
             .OrderByDescending(x => x.VfCount))
             .Take(3)
             .ToList();

を使用する必要はありませんSum。これは、グループ化された列を集約(要約)するためのものですが、特定の各列の関連テーブルの行数Sumだけが必要です。Count()NuturitionFact

これは、このSQLステートメントに対応します(つまり、必要なものです)

SELECT TOP 3 n.*, 
       (SELECT COUNT(*) FROM UserVerifiedFact uv WHERE uv.NuturitionFacts_Id = n.Id) AS NumbOfVer  
       FROM NutritionFact n 
       WHERE n.NutritionalServing_Id = @servingId
       ORDER BY NumbOfVer DESC
于 2013-02-05T23:06:15.900 に答える