LINQ对SQL查询+子查询的基本类型错误

本文关键字:查询 类型 错误 SQL LINQ | 更新日期: 2023-09-27 18:07:13

我得到了著名的"只有基本类型或枚举类型…"错误,我找不到解决方案。

这段代码让我的头爆炸了(它是另一个LINQ代码中选择的一部分):

Min = (from inddetails in EntitiesDB.ConfSet 
where (final.Max(x => x.hosp.Hos_NumOnc) > inddetails.Conf_Desde && final.Max(x => x.hosp.Hos_NumOnc) < inddetails.Conf_Hasta)
|| final.Max(x => x.hosp.Hos_NumOnc) > (from inddetails2 in EntitiesDB.ConfSet select inddetails2.Conf_Hasta).Max()
select inddetails.Conf_NumeroRegistros)

这是最后一次更新(没有改变)的完整代码:

var result = from indicadores in EntitiesDB.Catalogo_IndicadoresSet
                             join crit in EntitiesDB.Catalogo_CriteriosSet on indicadores.CodigoCriterio equals crit.CodigoCriterio
                             join dimen in EntitiesDB.Catalogo_DimensionSet on crit.CodigoDimension equals dimen.CodigoDimension
                             join grupo in EntitiesDB.Catalogo_GruposSet on dimen.CodigoGrupo equals grupo.CodigoGrupo
                             join indicador_resultado in EntitiesDB.Catalogo_Indicador_ResultadoSet.DefaultIfEmpty() on indicadores.CodigoIndicador equals indicador_resultado.CodigoIndicador /*into joined
                         from j in joined.DefaultIfEmpty()*/
                             join user in EntitiesDB.UsuariosSet on indicador_resultado.CodigoUsuario equals user.CodigoUsuario
                             join hosp in EntitiesDB.HospitalesSet on user.CodigoHospital equals hosp.CodigoHospital
                             join hosper in EntitiesDB.Rel_Hospital_PeriodoSet on hosp.CodigoHospital equals hosper.CodigoHospital
                             join period in EntitiesDB.PeriodosSet on hosper.CodigoPeriodo equals period.CodigoPeriodo
                             where period.CodigoPeriodo == periodos.CodigoPeriodo
                             group new { indicadores, hosper, hosp, grupo, crit, dimen, indicador_resultado, user, period } by new { hosper.CodigoPeriodo, hosp.CodigoHospital, grupo.CodigoGrupo, indicadores.CodigoIndicador, period.Per_Nombre, hosp.Hos_Nombre, hosp.Hos_NumeroOncologos, grupo.Gru_Descripcion, indicador_resultado.CodigoResultado, indicador_resultado.Resul_Completado, indicador_resultado.Resul_Numerador, indicador_resultado.Resul_Denominador, indicador_resultado.Resul_Valor, indicador_resultado.Resul_Objetivo, indicador_resultado.Resul_Variacion, indicador_resultado.Resul_Detalle, indicador_resultado.Resul_Fecha, indicadores.Ind_Descripcion, dimen.CodigoDimension, crit.CodigoCriterio } into final
                             orderby final.Key.CodigoPeriodo, final.Key.CodigoHospital, final.Key.CodigoGrupo
                             select new
                             {
                                 CodigoPeriodo = final.Key.CodigoPeriodo,
                                 NombrePeriodo = final.Key.Per_Nombre,
                                 CodigoHospital = final.Key.CodigoHospital,
                                 NombreHospital = final.Key.Hos_Nombre,
                                 NumeroOncologos = final.Key.Hos_NumeroOncologos),
                                 CodigoGrupo = final.Key.CodigoGrupo,
                                 NombreGrupo = final.Key.Gru_Descripcion,
                                 CodigoResultado = final.Max(x => x.indicador_resultado.CodigoResultado),
                                 Completado = final.Key.Resul_Completado,
                                 Numerador = final.Max(x => x.indicador_resultado.Resul_Numerador),
                                 Denominador = final.Max(x => x.indicador_resultado.Resul_Denominador),
                                 Valor = final.Max(x => x.indicador_resultado.Resul_Valor),
                                 Objetivo = final.Max(x => x.indicador_resultado.Resul_Objetivo),
                                 Variacion = final.Max(x => x.indicador_resultado.Resul_Variacion),
                                 Detalle = final.Key.Resul_Detalle,
                                 CodigoIndicador = final.Key.CodigoIndicador,
                                 NombreIndicador = final.Key.Ind_Descripcion,
                                 CodigoDimension = final.Max(x => x.dimen.CodigoDimension),
                                 CodigoCriterio = final.Max(x => x.crit.CodigoCriterio),
                                 CasosMinimos = (from inddetalle in EntitiesDB.Configuracion_IndicadoresDetalleSet
                                                 where (final.Key.Hos_NumeroOncologos > inddetalle.Conf_Desde && final.Key.Hos_NumeroOncologos < inddetalle.Conf_Hasta)
                                                     || final.Key.Hos_NumeroOncologos) > valorMaximo
                                                 select inddetalle.Conf_NumeroRegistros)
                             };

LINQ对SQL查询+子查询的基本类型错误

获取查询的最大值:

var finalMax = final.Max(x => x.hosp.Hos_NumOnc);
Min = (from inddetails in EntitiesDB.ConfSet 
where (finalMax > inddetails.Conf_Desde 
    && finalMax < inddetails.Conf_Hasta)
|| finalMax > (from inddetails2 in EntitiesDB.ConfSet select inddetails2.Conf_Hasta).Max()
select inddetails.Conf_NumeroRegistros);

final是一个(非原语)对象的集合,在SQL中没有对应的对象。这样做也更有效率。