Вы можете переписать ваш запрос следующим образом:
SELECT A.categoryname, COUNT(B.categoryid) AS TOT
FROM category A LEFT OUTER JOIN items B ON A.categoryid = B.categoryid
GROUP BY A.id, A.categoryname
Если ни у одной категории нет одинакового имени, вы можете опустить столбец A.id
.
Затем используйте SubSonic, аналогично этому (точный синтаксис может отличаться ...):
DAL.DB.Select(
Aggregate.GroupBy(DAL.A.categorynameColumn),
Aggregate.GroupBy(DAL.A.idColumn)
Aggregate.Count(DAL.B.categoryidColumn, "Tot")
)
.From<DAL.A>().LeftOuterJoin(DAL.B.categoryidColumn, DAL.A.categoryidColumn)