我如何为此做一个枢轴 [英] How can i made a pivot for this

查看:52
本文介绍了我如何为此做一个枢轴的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

基于此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答案

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

投注给出此错误

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

推荐答案

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

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

这篇关于我如何为此做一个枢轴的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆