используя оператор let для Intervals в linq - PullRequest
0 голосов
/ 06 февраля 2012

пожалуйста, рассмотрите это изображение:

enter image description here

У меня есть такая таблица:

 Age              Active            Men/Women
 -------------------------------------------------

Я хочу написать запрос с linq для сущностей, которые вычисляют Count всех возрастных интервалов для мужчин и женщин. Я могу использовать оператор let для вычисления одной строки, но хочу вычислить все в одном запросе.

спасибо

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

Я не думаю, что это возможно в 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.

1 голос
/ 06 февраля 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...