У меня есть метод, который я использую для создания сводного отчета на основе параметров, которые пользователь выбирает в списках выбора, для подсчета количества типов тестов, которые завершены в регионе , с подмножеством, в пределах диапазона дат.Lambda Linq Iqueryable group - добавить еще одну группу
Вот как выглядят данные, как: Завершена Test Считает по местоположению С 1 февраля 2015 года до 1 MAR 2015
Total TestType Location Region Division
455 24 Hour Lab 1 City 1 Division A
28 24 Hour Lab 2 City 1 Division A
95 24 Hour Clinic Z City 2 Division A
189 24 Hour Clinic Y City 2 Division A
Вот что это может выглядеть для другого типа испытания, в тот же период времени :
Total TestType Location Region Division
285 48 Hour Lab 1 City 1 Division A
12 48 Hour Lab 2 City 1 Division A
75 48 Hour Clinic Z City 2 Division A
106 48 Hour Clinic Y City 2 Division A
Теперь пользователи хотели бы видеть итоговую разбивку по testType
в одном отчете (в SQL, добавив еще один атрибут к группе). В моем списке выбора testTypeId
, я использую 0 как мой «Все». В идеальном мире у меня было бы еще одно дополнение к IQueryable
, если testTypeId == 0
, так что я могу сохранить тот же частный метод, а не писать новый запрос.
Вот что мы хотели бы, чтобы данные выглядят как в «ALL» ситуации:
Total TestType Location Region Division
455 24 Hour Lab 1 City 1 Division A
285 48 Hour Lab 1 City 1 Division A
59 12 Lead Lab 1 City 1 Division A
28 24 Hour Lab 2 City 1 Division A
12 48 Hour Lab 2 City 1 Division A
95 24 Hour Clinic Z City 2 Division A
75 48 Hour Clinic Z City 2 Division A
5 12 Lead Clinic Z City 2 Division A
189 24 Hour Clinic Y City 2 Division A
106 48 Hour Clinic Y City 2 Division A
8 12 Lead Clinic Y City 2 Division A
В приведенном ниже примере показано, что у меня есть то, что я хотел бы добавить в него, но синтаксис говорит мне, что я не могу взять IQueryable
, содержащий IGrouping
и конвертировать его в целевой тип IQueryable
.
Может ли кто-нибудь указать мне хорошее направление здесь?
private CompletedCountReport GetCompletedCountsByRegion(int regionId, DateTime? startDate, DateTime? endDate, int testTypeId)
{
var ccRpt = new CompletedCountReport { CompletedCounts = new List<CompletedCount>(), StartDate = startDate, EndDate = endDate, SelectedRegionID = regionId};
var query = HolterTestDao.FindAll(new GetCompletedByRegionIdAndDates(regionId, startDate.Value, endDate.Value));
// a specific test type was selected
if (testTypeId > 0)
{
query = query.Where(x => x.HolterTestType == testTypeId);
}
// THIS IS WHAT I WANT TO ADD -> otherwise group by test type <- THIS IS WHAT I WANT TO ADD.
if (testTypeId == 0)
{
query = query.GroupBy(x => x.HolterTestType);
}
// order by locationID within the region.
query = query.OrderBy(x => x.Location.ID);
var htList = query.ToList();
// now Group by Location, to get counts.
var reportContents = htList.GroupBy(x => x.Location.ID);
foreach (var r in reportContents)
{
var rList = r.ToList();
var cc = new CompletedCount();
var loc = LocationDao.FindById(r.Key);
cc.Description = loc.Description;
cc.RegionId = loc.Region.ID;
cc.DivisionId = loc.Region.Division.ID;
cc.TestTypeId = testTypeId;
cc.Count = rList.Count;
ccRpt.CompletedCounts.Add(cc);
}
return ccRpt;
}
Почему вы пытаетесь условно группировать данные? Просто * безоговорочно * группировать данные. – Servy
Значит, вы говорите всегда группу как по месту, так и по типу теста? Иногда они хотят видеть только цифры только для одного типа теста, иногда они хотят видеть все типы тестов. –
. Чтобы рассказать нам, как вы хотите, чтобы IGrouping разрешился. Если в одном IGrouping имеется несколько элементов, вы выбираете первый? – Shoe