Я не думаю, что это возможно в Linq2Sql, но я придумал этот запрос:
Func<int, string> ageGroup = age => string.Format("Age {0}-{1}", (age / 5) * 5, ((age / 5) * 5) + 4);
var blub = from row in table.AsEnumerable()
where row.IsActive == 1
group row by ageGroup(row.age)
into grouped
from g in grouped
let menCount = g.Aggregate(0, (sum, r) => sum + r.men)
let womenCount = g.Aggregate(0, (sum, r) => sum + r.women)
let totalCount = menCount + womenCount
select new { AgeGroup = g.Key, Men = menCount, Women = womenCount, Total = totalCount}
Сначала я определяю функцию, которая возвращает AgeGroup для данного возраста ((age / 5) * 5
дает начальный номер для AgeGroup). Оттуда это довольно просто. Группировка возрастов и сложение чисел.
Edit:
Я не думаю, что это возможно в одном запросе. Поскольку group by
завершает запрос (например, select
), вам нужно сначала сгруппировать, а затем сложить.
Вы не можете использовать IQueryable
, потому что функция ageGroup()
неизвестна в SQL и, следовательно, не может использоваться в Linq2Sql.