2

I have linq that return my data in this format

Servicio2 | Indicador  | Accion1
Servicio2 | Indicador  | Accion2
Servicio1 | Indicador1 | Accion1
Servicio1 | Indicador1 | Accion2

Is there a way to transform the output to this

Servicio2 | Indicador  | Accion1 , Accion2
Servicio1 | Indicador1 | Accion`, Accion2

Based on this linq

from A in db.IndicadorServicioAccion
                            .Include("Accion")
                            .Include("IndicadorServicio")
                            .Include(i => i.IndicadorServicio.Indicador)
                    where
                        A.Usuario.IDUsuario == id
                        && A.Permiso == true
                select A) 

UPDATE based on @Aducci answer

(from A in db.IndicadorServicioAccion
                            .Include("Accion")
                            .Include("IndicadorServicio")
                            .Include(i => i.IndicadorServicio.Indicador)
                    where
                        A.Usuario.IDUsuario == id
                        && A.Permiso == true
                group A by new { A.IndicadorServicio.Indicador.nombreIndicador, A.IndicadorServicio.Servicio.Descripcion } into ag
                select new
                     {
                        ag.Key.nombreIndicador,
                        ag.Key.Descripcion,
                        Acciones = ag.Select(x => x.Accion.Descripcion) 
                     }).AsEnumerable().Select(xx => new
                     {
                       xx.Descripcion,
                       xx.nombreIndicador,
                       xx.Acciones.Aggregate((current, next) => current + ", " + next)
                     });

Bet gives this error

`Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.`
Jorge
  • 17,896
  • 19
  • 80
  • 126

1 Answers1

1

First portion uses your linq-entities provider, but after AsEnumerable it uses Linq to objects in order to return a comma seperated list

I changed the last property to give it an alias

AggregateProperty = xx.Acciones.Aggregate((current, next) => current + ", " + next)

 (from A in db.IndicadorServicioAccion
                            .Include("Accion")
                            .Include("IndicadorServicio")
                            .Include(i => i.IndicadorServicio.Indicador)
                    where
                        A.Usuario.IDUsuario == id
                        && A.Permiso == true
                group A by new { A.IndicadorServicio.Indicador.nombreIndicador, A.IndicadorServicio.Servicio.Descripcion } into ag
                select new
                     {
                        ag.Key.nombreIndicador,
                        ag.Key.Descripcion,
                        Acciones = ag.Select(x => x.Accion.Descripcion) 
                     }).AsEnumerable().Select(xx => new
                     {
                       xx.Descripcion,
                       xx.nombreIndicador,
                       AggregateProperty = xx.Acciones.Aggregate((current, next) => current + ", " + next)
                     });
Aducci
  • 26,101
  • 8
  • 63
  • 67
  • Hi, and thanks for asking base on your query I modified my question because i have and error adding your query – Jorge Dec 20 '11 at 16:46