Ich versuche, einige Daten zu dynamisch neu Struktur in einer Baumstruktur dargestellt werden, die der Benutzer zu drei der folgenden Dimensionen Gruppe durch die Daten, um bis erlaubt:erstellen GroupBy Statements dynamisch
Organisation
Company
Site
Division
Department
Wenn der Benutzer zum Beispiel auswählen würde, dass er nach Firma, dann Standort, dann Abteilung ... gruppieren möchte, würde der folgende Code die erforderlichen Gruppierungen durchführen.
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();
Dies würde eine structre wie folgt geben:
+ Company A
+ Site A
+ Division 1
+ Division 2
+ Site B
+ Division 1
+ Company B
+ Site C
+ Division 2
+ Company C
+ Site D
dies stellt jedoch nur mich mit auf einer großen Anzahl von Kombinationen.
Wie würde ich dies in etwas konvertieren, das den äquivalenten Ausdruck dynamisch basierend auf den drei vom Benutzer gewählten Dimensionen erstellen könnte, sodass ich keinen der Ausdrücke für jede Kombination erstellen muss !! ?
Danke Jungs.
Ein weiterer Ansatz besteht darin, 5 Grouper-Klassen (eine für jede Art von Gruppierung) mit einer gemeinsamen Schnittstelle IGroupEntities {List GetItems (IEnumerable
Danke für diese Antwort! Ich hatte etwas Ähnliches versucht, aber es musste einen fehlenden Link gegeben haben, da ich diese Iteration nie zum Abschluss brachte. Ich habe Ihre Probe als Starter verwendet und eine Lösung programmiert, die perfekt für das funktioniert, was ich versucht habe. Vielen Dank!!! – Penfold
+100 wenn ich könnte! Gute Antwort! –