Я думаю, что ваш запрос Linq будет выглядеть примерно так:
var result = from a in AccountRecord.Queryable
join s in SchoolRecord.Queryable on a.id equals s.account_id
join u in UserRecord.Queryable on a.id equals u.account_id
join p in PointsRecord.Queryable on u.id equals p.user_id
where a.payment == "S"
group by a.id
select new
{
Account = a,
School = s,
Count = p.Count()
};
Хотя я не уверен, насколько хорошо NHibernate будет обрабатывать комбинации group by
и Count()
.Возможно, вы захотите посмотреть, чем в итоге будет сгенерированный SQL, если он не выдаст ошибку.
Если это не сработает, вы можете выбрать записи обратно и сгруппировать / подсчитать их вприложение, а не больше, как:
var data = from a in AccountRecord.Queryable
join s in SchoolRecord.Queryable on a.id equals s.account_id
join u in UserRecord.Queryable on a.id equals u.account_id
join p in PointsRecord.Queryable on u.id equals p.user_id
where a.payment == "S"
select new
{
Account = a,
School = s,
Count = c
};
var grouped = data.ToList.GroupBy(x => x.Account.Id);