2

私は分類された広告プロジェクトに取り組んでいます。ほとんどの広告が投稿される上位カテゴリを取得するという問題に直面しています。すべてのカテゴリにはサブカテゴリもあります。

クエリを作成しましたが、必要なサブカテゴリ広告で機能していますが、カテゴリにサブカテゴリがない場合は、親カテゴリの広告をカウントする必要があります。

var result = (from c in db.Category 
              join a in db.Ad on c.CategoryId equals a.CategoryId 
              where c.ParentId != null 
              group c by c.ParentId into g 
              select new { cat = g.Key, a = g.Count() })
                .OrderBy(c => c.cat)
                .OrderByDescending(a => a.a);

私のカテゴリテーブルはこのようなものです

カテゴリ ID ----- 親 ID ----- 名前

これどうやってするの?

4

2 に答える 2

0

私はこれが別々のクエリで行うことができると思います:

parentIdが設定されていないカテゴリのリストを取得します。

var resultsWithoutSubs = from c in db.Category
             where c.ParentId == null 
               && !result.Any(r => cat == c.CategoryId)
             select c;

上記のリストに基づいて、元のクエリを繰り返します。

var counts =  from c in resultsWithoutSubs
          join a in dbAd on c.CategoryId equals a.CategoryId
          group c by c.CategoryId into g
          select new {cat = g. Key, a = g.Count};

次に、これらの最初と最後のリストを結合して、結果を並べ替えることができるはずです。

于 2012-05-05T12:46:01.800 に答える
0

これを試して:

var results = db.Category
    .Join(db.Ad, cat => cat.CategoryId, 
          ad => ad.CategoryId, (cat, ad) => new { cat, ad } )
    .Where (c => !dbCategory
      .Any (d => c.cat.CategoryId == d.ParentId) && c.cat.ParentId == null)
     .GroupBy (c => c.cat.CategoryId) 
     .Select (g => new  
        { cat = g.Key, a = g.Count () } 
); 
于 2012-05-05T16:50:25.787 に答える