不支持嵌套查询。 Operation1 ='案例'Operation2 ='收集

时间:2017-10-23 19:23:42

标签: c# entity-framework lambda nested-queries

以下句子抛出此异常:不支持嵌套查询。 Operation1 ='Case'Operation2 ='收集

_contexto.PESO_PIE.Where(w => w.LOTE_SACRIFICIO.LOTE.ID_ESTATUS_LOTE != _estatus_cerrado)
                    .GroupJoin(_contexto.PESO_CALIENTE,
                    PP => PP.ID_SACRIFICIO,
                    pc => pc.ID_SACRIFICIO,
                    (x, y) => new { PP = x, pc = y.DefaultIfEmpty() })
                    .SelectMany(a => a.pc.Select(b => new { PP = a.PP, pc = b }))
                    .Select(s => new cPeso_Caliente() {
                        Sec_Sacrificio = s.PP.SEC_SACRIFICIO,
                        Cliente = s.pc != null ? s.pc.DESTINO_CLIENTE.DESTINO_CLIENTE1 : null,
                        Consec_Dia = s.pc != null ? s.pc.CONSEC_DIA : (int?)null,
                        Es_Maquila = s.PP.LOTE_SACRIFICIO.ORDEN_COMPRA.PROVEEDOR.ES_MAQUILA,
                        Fecha_Registro = s.pc != null ? s.pc.FECHA_REGISTRO : (DateTime?)null,
                        Folio_Lote = s.PP.LOTE_SACRIFICIO.LOTE.ID_LOTE, // cambiar por folio lote despues de merge
                        Folio_Orden_Compra = s.PP.LOTE_SACRIFICIO.ORDEN_COMPRA.ID_ORDEN_COMPRA, //cambiar por folio orden sacrificio despues de merge
                        IC = s.pc != null ? s.pc.IC : (byte?)null,
                        Id_Destino_Cliente = s.pc != null ? s.pc.ID_DESTINO_CLIENTE : (long?)null,
                        Id_Estado_Producto = s.pc != null ? s.pc.ETIQUETA.ID_ESTADO_PRODUCTO : null,
                        Id_Etiqueta = s.pc != null ? s.pc.ID_ETIQUETA : null,
                        Id_Proveedor = s.PP.LOTE_SACRIFICIO.ORDEN_COMPRA.ID_PROVEEDOR,
                        Id_Sacrificio = s.PP.ID_SACRIFICIO,
                        Id_Usuario = s.pc != null ? s.pc.ID_USUARIO : null,
                        IFE = s.pc != null ? s.pc.IFE : (byte?)null,
                        IGC = s.pc != null ? s.pc.IGC : (byte?)null,
                        IGP = s.pc != null ? s.pc.IGP : (byte?)null,
                        MAD = s.pc != null ? s.pc.MAD : (byte?)null,
                        M_30 = s.pc != null ? s.pc.M_30 : (bool?)null,
                        Proveedor = s.PP.LOTE_SACRIFICIO.ORDEN_COMPRA.PROVEEDOR.NOMBRE_COMERCIAL,
                        R1 = s.pc != null ? s.pc.R1 : false,
                        Version = s.pc != null ? s.pc.VERSION : null,
                        GPE = s.pc != null ? s.pc.GPE : (byte?)null,
                        Tipo_Ganado = s.PP.LOTE_SACRIFICIO.TIPO_GANADO.TIPO_GANADO1,
                        Peso_Caliente = s.pc != null ? s.pc.ETIQUETA.PESO : (decimal?)null,
                        Peso_Pie= s.PP.PESO_PIE1,
                        Id_Producto=s.PP.LOTE_SACRIFICIO.ORDEN_COMPRA.DETALLE_OC.FirstOrDefault().ID_PRODUCTO,
                        Id_Lote_Sacrificio=s.PP.ID_LOTE,
                        Id_Tipo_Lote=s.PP.ID_TIPO_LOTE,
                        Log_Etiqueta_Anomalia= s.pc !=null && s.pc.ETIQUETA.ID_ESTADO_PRODUCTO!="N"? 
                        s.pc.ETIQUETA.LOG_ETIQUETA_ANOMALIA.Select(sa=>new cLog_Etiqueta_Anomalia {
                            Id_Anomalia= sa.ID_ANOMALIA,
                            Id_Etiqueta= sa.ID_ETIQUETA,
                            Id_Log_Etiqueta= sa.ID_LOG_ETIQUETA,
                            Id_Resultado_Anomalia= sa.ID_RESULTADO_ANOMALIA,
                            Version= sa.VERSION
                        }): null 
                        }).OrderBy(o=>o.Sec_Sacrificio).AsEnumerable()

我知道问题出现在查询的以下部分

Log_Etiqueta_Anomalia= s.pc !=null && s.pc.ETIQUETA.ID_ESTADO_PRODUCTO!="N"? 
                        s.pc.ETIQUETA.LOG_ETIQUETA_ANOMALIA.Select(sa=>new cLog_Etiqueta_Anomalia {
                            Id_Anomalia= sa.ID_ANOMALIA,
                            Id_Etiqueta= sa.ID_ETIQUETA,
                            Id_Log_Etiqueta= sa.ID_LOG_ETIQUETA,
                            Id_Resultado_Anomalia= sa.ID_RESULTADO_ANOMALIA,
                            Version= sa.VERSION
                        }): null 

我已经阅读了相关问题但这个例外但我找不到可以解决这个问题的具体问题。

有没有办法完成此操作或EF无法处理此查询?

考虑到PESO_CALIENTE和SACRIFICIO的关系为1:1

2 个答案:

答案 0 :(得分:0)

不支持正弦嵌套查询,我认为您应该定义一个单独的方法来获取case的值:

Etiqueta_Anomalia

将替换的逻辑移动到新方法。这样,您还可以使查询更具可读性。

答案 1 :(得分:0)

尝试以下 Log_Etiqueta_Anomalia 代码:

Log_Etiqueta_Anomalia= new List<[TYPE OF pc]>() {s.pc}.
                        Where(pc => pc != null && pc.ETIQUETA.ID_ESTADO_PRODUCTO!="N").
                        Select(pc => pc.ETIQUETA.LOG_ETIQUETA_ANOMALIA). 
                        Select(sa=>new cLog_Etiqueta_Anomalia {
                            Id_Anomalia= sa.ID_ANOMALIA,
                            Id_Etiqueta= sa.ID_ETIQUETA,
                            Id_Log_Etiqueta= sa.ID_LOG_ETIQUETA,
                            Id_Resultado_Anomalia= sa.ID_RESULTADO_ANOMALIA,
                            Version= sa.VERSION
                        })