Я пытаюсь динамически повторно структуру некоторые данные, которые будут показаны в виде дерева, что позволяет будет пользователю выбрать до трех следующих размеров группировки данных по:Создание GroupBy Заявления Динамически
Organisation
Company
Site
Division
Department
Так, например, если пользователь должен был выбрать, что они хотели бы сгруппировать Компанией, тогда Сайт затем Отдел ... следующий код выполнит необходимые группировки.
var entities = orgEntities
// Grouping Level 1
.GroupBy(o => new { o.CompanyID, o.CompanyName })
.Select(grp1 => new TreeViewItem
{
CompanyID = grp1.Key.CompanyID,
DisplayName = grp1.Key.CompanyName,
ItemTypeEnum = TreeViewItemType.Company,
SubItems = grp1
// Grouping Level 2
.GroupBy(o => new { o.SiteID, o.SiteName })
.Select(grp2 => new TreeViewItem
{
SiteID = grp2.Key.SiteID,
DisplayName = grp2.Key.SiteName,
ItemTypeEnum = TreeViewItemType.Site,
SubItems = grp2
// Grouping Level 3
.GroupBy(o => new { o.Division })
.Select(grp3 => new TreeViewItem
{
DisplayName = grp3.Key.Division,
ItemTypeEnum = TreeViewItemType.Division,
}).ToList()
}).ToList()
})
.ToList();
Это дало бы structre так:
+ Company A
+ Site A
+ Division 1
+ Division 2
+ Site B
+ Division 1
+ Company B
+ Site C
+ Division 2
+ Company C
+ Site D
Однако, это только дает мне на большое число комбинаций.
Как я мог бы преобразовать это во что-то, что могло бы создать эквивалентное выражение динамически на основе трех измерений, которые выбрал пользователь, и поэтому мне не нужно создавать одно из этих выражений для каждой комбинации! ?
Спасибо, ребята.
Другой подход состоит в том, чтобы сделать 5 классов Grouper (по одному для каждого типа группировки) с общим интерфейсом IGroupEntities {List GetItems (IEnumerable
Спасибо за этот ответ! Я пробовал что-то подобное, но, должно быть, отсутствовала ссылка, так как я до сих пор не закончил эту итерацию. Я использовал ваш образец как стартер и закодировал решение, которое отлично работает для того, что я пытался сделать. Большое спасибо!!! – Penfold
+100 если бы я мог! Отличный ответ! –