我怎样才能做到这一点

时间:2011-12-20 16:22:17

标签: linq entity-framework-4.1

我有linq以这种格式返回我的数据

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

有没有办法将输出转换为此

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

基于此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) 

更新基于@Aducci答案

(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出现此错误

`Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.`

1 个答案:

答案 0 :(得分:1)

第一部分使用您的linq-entities提供程序,但在AsEnumerable之后它使用Linq对象以返回逗号分隔列表

我更改了最后一个属性以给它一个别名

AggregateProperty = xx.Acciones.Aggregate((当前,下一个)=>当前+“,”+下一个)

 (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)
                     });