簡體   English   中英

LINQ to SQL查詢+子查詢中的原始類型錯誤

[英]Primitive type error in LINQ to SQL query+subquery

我遇到了著名的“僅原始類型或枚舉類型...”錯誤,但找不到解決方案。

這是讓我大吃一驚的代碼(這是另一個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)

                             };

從查詢中取出最大值:

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等效項。 以這種方式執行此操作也更加有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM