sto cercando di ristrutturare dinamicamente alcuni dati da visualizzare in una visualizzazione struttura che sarà permette all'utente di selezionare fino a tre delle seguenti dimensioni raggruppare i dati da:Crea GroupBy bilancio dinamicamente
Organisation
Company
Site
Division
Department
Ad esempio, se l'utente dovesse selezionare di voler raggruppare per società, quindi sito, divisione ... il codice seguente eseguirà i raggruppamenti richiesti.
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();
Questo darebbe uno structre come questo:
+ Company A
+ Site A
+ Division 1
+ Division 2
+ Site B
+ Division 1
+ Company B
+ Site C
+ Division 2
+ Company C
+ Site D
Tuttavia, questo mi fornisce solo su di un gran numero di combinazioni.
Come farei per convertire questo in qualcosa che potrebbe creare l'espressione equivalente in modo dinamico in base alle tre dimensioni che l'utente ha scelto e quindi non devo creare una di ciascuna di queste espressioni per ciascuna combinazione !! ?
Grazie ragazzi.
Un altro approccio consiste nel rendere 5 classi Grouper (una per ogni tipo di raggruppamento) con un'interfaccia comune IGroupEntities {List GetItems (IEnumerable
Grazie per questa risposta! Avevo provato qualcosa di simile ma doveva esserci un collegamento mancante perché non avevo mai completato questa iterazione. Ho usato il tuo campione come antipasto e ho codificato una soluzione che funziona perfettamente per quello che stavo cercando di fare. Grazie mille!!! – Penfold
+100 se potessi! Bella risposta! –