Linq включает во вложенную группу по запросу - PullRequest
1 голос
/ 22 апреля 2020

У меня ниже относительно сложный запрос с несколькими вложенными группами по запросам. Проблема в том, что я не знаю, как добавить запросы в любую группу по запросам. Есть ли способ включить подвойства в запросы подгруппы в EF6?

return db.PatientOrders
                .Include(x => x.Patient) // this has no effect
                .Where(x => !x.ProcessedOn.HasValue && x.Patient.Home.PharmacyId == pharmacyID)
                .GroupBy(x => x.Patient.Home)
                .ToDictionary(x => x.Key, x => x
                            .ToList()
                            .GroupBy(y => y.Patient.Department)
                            .ToDictionary(y => y.Key, y => y
                                    .Include(x => x.OrderLines) // this does not compile
                                    .ToList()
                                    .GroupBy(z => z.Patient)
                                    .ToDictionary(z => z.Key, z => z.ToList(), new PatientEqualityComparer()), new HomeDepartmentEqualityComparer()), new HomeEqualityComparer());

1 Ответ

0 голосов
/ 22 апреля 2020

Я нашел способ сделать это, но я не уверен, что решение будет хорошим с точки зрения производительности.

            // group by reshapes query so previous includes are lost
            // solution: flatten after group by then do includes then group by again
            return db.PatientOrders
                .GroupBy(x => x.Patient.Home) // Group
                .SelectMany(g => g.AsEnumerable()) // Ungroup
                .Include(x => x.Patient)
                .Include(x => x.Patient.Home)
                .Include(x => x.Patient.Doctor)
                .Include(x => x.Patient.Department)
                .Include(x => x.OrderLines)
                .Include(x => x.OrderLines.Select(y => y.Product))
                .Where(x => !x.ProcessedOn.HasValue && x.Patient.Home.PharmacyId == pharmacyID)
                .AsEnumerable() // Switch to LINQ to Objects
                .GroupBy(x => x.Patient.Home) // Group again
                .ToDictionary(x => x.Key, x => x
                            .ToList()
                            .GroupBy(y => y.Patient.Department)
                            .ToDictionary(y => y.Key, y => y
                                    .ToList()
                                    .GroupBy(z => z.Patient)
                                    .ToDictionary(z => z.Key, z => z.ToList(), new PatientEqualityComparer()), new HomeDepartmentEqualityComparer()), new HomeEqualityComparer());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...