使用Lambda Expression SQL连接行

时间:2014-01-23 21:57:56

标签: c# sql linq lambda

美好的一天

我对某些疑问有点麻烦......也许你可以帮助我......

我想要实现的是将1列连接成1行,我一直在搜索,但是使用lambda表达式找不到任何内容......

现在我有这个SQLFiddle显示我想要实现的目标:http://sqlfiddle.com/#!3/4c237/18 问题是我不知道如何将其转换为lambda表达式或至少Linq

有可能吗? 你们能帮帮我吗?


修改

这样做的目的是用作Radgrid的DataSource。在此之前我只是使用Header Table,但现在我必须使用一个新列并显示所有负责这些操作的人......

我之前的DataSource是这样的:

public IList<DiscrepanciasHeader> regresaListaDiscrepancias()
    {
        using (CALIDADEntities context = new CALIDADEntities())
        {
            var regresa = context.DISCREPANCIAS_HEADERS
                                 .Include("DISCREPANCIAS_CAT_TIPO")
                                 .ToList()
                                 .Join(context.ListaEmpleados
                                       ,DHH => DHH.ID_AUTOR.ToString()
                                       ,LEE => LEE.EMP_NONOMINA
                                       ,(DHH, LEE) => new DiscrepanciasHeader(DHH, LEE)
                                 );

            return regresa.ToList();
        }
    }

DISCREPANCIAS_HEADERS是我的Headers表(它有一个FK到DISCREPANCIAS_CAT_TIPO),我不得不做一个.ToList(),因为我的用户列表(ListaEmpleados)是一个视图,所有内容都是VARCHAR 所以要正确加入这是我能想到的唯一方法(能够在我的ID_AUTOR列中执行ToString()方法


再次编辑......

我很遗失......我正在关注第二个链接(Using pivot table in linq),但我迷失了SelectMany,现在我有了这个(我不喜欢这个)。 ..我开始认为SP是解决方案......

DISCREPANCIAS_HEADERS
.Include("DISCREPANCIAS_CAT_TIPO")
.ToList()
.Join(DISCREPANCIAS_ACCIONES
    ,DH => DH.ID
    ,DA => DA.ID_HEADER
    ,(DH, DA) => new{
                        ID = DH.ID
                        ,NO_PARTE = DH.NO_PARTE
                        ,NO_PROYECTO = DH.NO_PROYECTO
                        ,NO_PO = DH.NO_PO
                        ,CANTIDAD = DH.CANTIDAD
                        ,PROVEEDOR = DH.PROVEEDOR
                        ,TRANSPORTISTA = DH.TRANSPORTISTA
                        ,NO_GUIA = DH.NO_GUIA
                        ,COBO = DH.COBO
                        ,ID_TIPO = DH.ID_TIPO
                        ,TIPO_DISCREPANCIA = DH.DISCREPANCIAS_CAT_TIPO.DESCRIPCION
                        ,STATUS = DH.STATUS
                        ,ID_AUTOR = DH.ID_AUTOR
                        ,FEC_AUTOR = DH.FEC_AUTOR
                        ,ID_RESPONSABLE = DA.ID_RESPONSABLE
                    })
.Join(ListaEmpleados
,DH => DH.ID_AUTOR.ToString()
,LE => LE.EMP_NONOMINA
,(DH, LE) => new    {
                        ID = DH.ID
                        ,NO_PARTE = DH.NO_PARTE
                        ,NO_PROYECTO = DH.NO_PROYECTO
                        ,NO_PO = DH.NO_PO
                        ,CANTIDAD = DH.CANTIDAD
                        ,PROVEEDOR = DH.PROVEEDOR
                        ,TRANSPORTISTA = DH.TRANSPORTISTA
                        ,NO_GUIA = DH.NO_GUIA
                        ,COBO = DH.COBO
                        ,ID_TIPO = DH.ID_TIPO
                        ,TIPO_DISCREPANCIA = DH.TIPO_DISCREPANCIA
                        ,STATUS = DH.STATUS
                        ,ID_AUTOR = DH.ID_AUTOR
                        ,AUTOR = LE.EMP_NOMBRE
                        ,FEC_AUTOR = DH.FEC_AUTOR
                        ,ID_RESPONSABLE = DH.ID_RESPONSABLE
                    })
.Join(ListaEmpleados
,DH => DH.ID_RESPONSABLE.ToString()
,LE => LE.EMP_NONOMINA
,(DH, LE) => new    {
                        ID = DH.ID
                        ,NO_PARTE = DH.NO_PARTE
                        ,NO_PROYECTO = DH.NO_PROYECTO
                        ,NO_PO = DH.NO_PO
                        ,CANTIDAD = DH.CANTIDAD
                        ,PROVEEDOR = DH.PROVEEDOR
                        ,TRANSPORTISTA = DH.TRANSPORTISTA
                        ,NO_GUIA = DH.NO_GUIA
                        ,COBO = DH.COBO
                        ,ID_TIPO = DH.ID_TIPO
                        ,TIPO_DISCREPANCIA = DH.TIPO_DISCREPANCIA
                        ,STATUS = DH.STATUS
                        ,ID_AUTOR = DH.ID_AUTOR
                        ,AUTOR = LE.EMP_NOMBRE
                        ,FEC_AUTOR = DH.FEC_AUTOR
                        ,ID_RESPONSABLE = DH.ID_RESPONSABLE
                        ,RESPONSABLE = LE.EMP_NOMBRE
                    })

.GroupBy(DH => new {
    ID = DH.ID
})

你会建议继续这样吗?或诉诸SP?

这是我到目前为止的地方......,实际上并不知道每组只返回1行 This is what I have so far

0 个答案:

没有答案