Как сгруппировать данные дважды в EF? - PullRequest
2 голосов
/ 02 марта 2011

Это мой текущий запрос LINQ:

            var list_1 = from z in _uow.Events.FindAll()
                     group z by new
                                    {
                                        z.GroupOfEvents.Customer,
                                        z.GroupOfEvents.GroupOfGroupOfEvents.Data.Year,
                                        z.GroupOfEvents.GroupOfGroupOfEvents.Data.Month,
                                        z.GroupOfEvents.GroupOfGroupOfEvents.Data.Day
                                    }
                         into zz
                         select new
                                    {
                                        zz.Key.Customer.Id,
                                        zz.Key.Year,
                                        zz.Key.Month,
                                        zz.Key.Day,
                                        Amount = zz.Sum(a => a.Amount)
                                    };

Я хотел бы получить данные, сгруппированные по идентификатору клиента, а затем по дням (год-месяц-день).Поэтому я хочу получить доступ к определенной сумме на клиента в день.Есть идеи как это сделать?

1 Ответ

1 голос
/ 02 марта 2011

Пока я пришел с этим, но я не уверен, что это лучший способ?

            var list_a =
            from klient in _uow.Klient.FindAll()
            select
                new
                    {
                        Klient = klient,
                        Days =
                from grupaZdarzen in klient.GrupaZdarzen
                group grupaZdarzen by new
                                          {
                                              grupaZdarzen.ZestawGrupZdarzen.Data.Year,
                                              grupaZdarzen.ZestawGrupZdarzen.Data.Month,
                                              grupaZdarzen.ZestawGrupZdarzen.Data.Day
                                          }
                into grupyZdarzenByDay
                select new
                           {
                               Data = grupyZdarzenByDay.Key,
                               Total =
                    (from grupaZdarzenByDay in grupyZdarzenByDay
                     from zdarzeniaByGrupa in grupaZdarzenByDay.Zdarzenie
                     select zdarzeniaByGrupa.Ilosc).Sum()
                           }
                    };

        var list_b = list_a.ToDictionary(a => a.Klient.Id,
                                         a =>
                                         a.Days.ToDictionary(
                                             b => b.Data.Day + "/" + b.Data.Month + "/" + b.Data.Year, b => b.Total));
...