Вложенный запрос не поддерживается. Operation1='Дело' Operation2='Собрать

Следующее предложение вызывает это исключение: вложенный запрос не поддерживается. Operation1='Дело' 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.


person Salvador Ruiz Guevara    schedule 23.10.2017    source источник


Ответы (2)


Синусоидальные вложенные запросы не поддерживаются, я думаю, вам следует определить отдельный метод для получения значения Etiqueta_Anomalia:

Etiqueta_Anomalia = GetEtiqueta_Anomalia(s, sa);

Переместив замененную логику в новый метод. Таким образом, вы также сделаете свой запрос более читабельным.

person Abdullah Dibas    schedule 23.10.2017
comment
Я думал то же самое, но я хотел знать, если это выполнимо. - person Salvador Ruiz Guevara; 23.10.2017

Попробуйте следующий код для 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
                        })
person Minoosha    schedule 19.03.2021