我正在开展分类广告项目我面临的问题是获得大多数广告发布的顶级类别每个类别都有子类别。
我提出了查询,但它适用于我想要的子类别广告,如果任何类别没有子类别,则应计算父类别广告。
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);
我的类别表就像这样
CategoryId ----- ParentId -----姓名
我该怎么做?
答案 0 :(得分: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};
然后你应该能够将这些列表的第一个和最后一个列表联合起来并对结果进行排序。
答案 1 :(得分: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 () }
);