3

LINQ クエリで 1 つのテーブルに対して複数のカウントを行うのに問題があります。私はNHibernate、LINQ to NHibernate、およびC#を使用しています。

query はデータが入力されたリストです。FullRef というブール値を持つテーブルがあります。LINQ クエリを実行して、各 TrackId で FullRef = false および FullRef = true の発生回数を取得したいと考えています。TrackId は、track.Source == "UserRef" を取得するたびに新しい行を取得します。

次のクエリでは、(FullRefTrueCount から) FullRef = true の正しいカウントを取得しますが、FullRefFalseCount で未知の間違った数を返します。

var query2 = from track in query
    where track.Source == "UserRef"
    group track by new { TrackId = track.TrackId, FullRef = track.FullRef } into d

    select new FullReferrer
    {
        Customer = d.Key.TrackId,
        FullRefFalseCount = d.Where(x => x.FullRef == false).Count(),
        FullRefTrueCount = d.Where(x => x.FullRef == true).Count()
    };

誰でもそれを修正する方法について何か考えがありますか? .Where() 句が無視され、「グループ化」が私を台無しにしていると確信しています。なんとかできたら

group track by new { TrackId = track.TrackId, FullRefTrue = track.FullRef, FullRefFalse = !track.FullRef }" 

それはうまくいくでしょう。これを行う方法はありますか?

4

1 に答える 1

3

trackId による結果が必要な場合は、trackId のみでグループ化する必要があります...

var query2 = query
              .Where(m => m.Source == "UserRef")
              .GroupBy(m => m.TrackId)
              .Select(g => new FullReferrer {
                 Customer = g.Key,
                 FullRefFalseCount = g.Count(x => !x.FullRef),
                 FullRefTrueCount = g.Count(x => x.FullRef)
              });
于 2013-06-07T19:27:32.040 に答える