以下句子抛出此异常:不支持嵌套查询。 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
答案 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
})