estoy tratando de volver a la estructura dinámicamente algunos datos que se muestran en una vista de árbol el cual se permite al usuario seleccionar hasta tres de las siguientes dimensiones para agrupar los datos por:Declaraciones Crear GroupBy dinámicamente
Organisation
Company
Site
Division
Department
Entonces, por ejemplo, si el usuario seleccionara que desea agrupar por Compañía, Sitio, luego División ... el siguiente código realizaría las agrupaciones requeridas.
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();
Esto daría un Structre así:
+ Company A
+ Site A
+ Division 1
+ Division 2
+ Site B
+ Division 1
+ Company B
+ Site C
+ Division 2
+ Company C
+ Site D
Sin embargo, esto sólo me proporciona en un gran número de combinaciones.
¿Cómo podría convertir esto en algo que podría crear la expresión equivalente dinámicamente en función de las tres dimensiones que el usuario ha elegido y así no tengo que crear una de cada una de estas expresiones para cada combinación !! ?
Gracias chicos.
Otro enfoque consiste en crear 5 clases de Grouper (una para cada tipo de agrupación) con una interfaz común IGroupEntities {List GetItems (IEnumerable
¡Gracias por esta respuesta! Había intentado algo similar, pero debe haber habido un eslabón perdido ya que nunca llegué a completar esta iteración. He utilizado su muestra como iniciador y he codificado una solución que funciona perfectamente para lo que estaba tratando de hacer. ¡¡¡Muchas gracias!!! – Penfold
+100 si pudiera! ¡Gran respuesta! –