Linq to Entity Group по дате - PullRequest
       2

Linq to Entity Group по дате

4 голосов
/ 26 марта 2011

Провел много исследований, но все еще с трудом. Рассмотрим базу данных, в которой есть таблица транзакций «CreatedOn», «Amount», «Type». Мне нужно иметь возможность сделать запрос сущности, чтобы получить транзакции определенного типа, сгруппированные по разным датам (месяц / день и т. Д.).

Представьте себе таблицу с:

2011/1/22   $300   Deposit
2011/2/18   $340   Deposit
2011/3/6   $200    Other
2011/3/6   $100    Deposit
2011/3/7   $50     Deposit

Я мог бы запросить все депозиты, сгруппированные по месяцам, чтобы получить:

2011-1 $300 1deposit
2011-2 $340 1deposit
2011-3 $150 2deposits

Как мне тогда адаптировать этот запрос к дням, а не месяцам?

Вот мой текущий блок кода, но я получаю внутреннее исключение linq

Невозможно сгруппироваться на A1

var result = context.TransactionEntities.Where(d => d.Type == "Deposit")                                     
                    .GroupBy(g => new { g.CreatedOn.Year, g.CreatedOn.Month })
                    .Select(g => new
                           {
                                 DateKey = g.Key,
                                 TotalDepositAmount = g.Sum(d => d.Amount),
                                 DepositCount = g.Count()
                            }).ToList();

Примечание. В настоящее время я использую разъем MySql, и я прочитал, возможно, это ошибка?

Ответы [ 3 ]

1 голос
/ 26 марта 2011
Func<DateTime, object> groupByClause;
if (groupByDay) groupByClause = date => date.Date;
else if (groupByMonth) groupByClause = date => new { date.Year, date.Month};
else throw new NotSupportedException("Some option should be chosen");

var result = data.Where(d => d.Type == "Deposit")
                 .GroupBy(groupByClause)
                 .Select(g => new { DateKey = g.Key,
                                    TotalDepositAmount = g.Sum(d => d.Amount),
                                    DepositCount = g.Count(),
                 });

Конечно, нужно проверить, примет ли это linq-2-entity.

0 голосов
/ 16 февраля 2013

Это, вероятно, ошибка в коннекторе MySQL.Мое решение для этого было разместить .ToList() как раз перед .GroupBy().

0 голосов
/ 26 марта 2011

Проверьте код, указанный в моем вопросе: Группировка по неделям в LINQ to Entities .Он показывает, как вы можете сгруппировать ваши данные по дням и месяцам.Дайте мне знать, если у вас есть другие вопросы.

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