LINQ Join Group Object reference not set to an instance of an object <SelectManyIterator>

3 posts, 1 answers
  1. Camilo
    Camilo avatar
    4 posts
    Member since:
    Oct 2012

    Posted 01 Nov 2013 Link to this post

    Hi, I have the following problem in a Linq query with subquery and returns me a list group but materialize against a user-defined class, the resulting error message is as follows. Cual puede ser la mejor solución a este problema, si el objeto de materializacion permite datos null, que tipo de dato debo evaluar para que lo reciba, gracias por sus comentarios.

    {System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.
       en lambda_method(Closure , <>f__AnonymousType16`2 , <>f__AnonymousType15`7 )
       en System.Linq.Enumerable.<SelectManyIterator>d__31`3.MoveNext()
       en System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
       en System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
       en RFASTCUR.C39.LogicaAplicacion.M39SolicitudBLL.ObtenerList()

    ////// The Class Business /////////

    namespace RFASTCUR.C39.LogicaAplicacion
        public partial class M39SolicitudBLL   

            public List<M39SolicitudRtoDTO> ObtenerList()

                List<M39SolicitudRtoDTO> listaM39SolicitudRtoDTO = null;

                    listaM39SolicitudRtoDTO = (
                            from tablaSolicitud in this.bdContext.M39Solicituds
                            join tablaSolicitudEstadoRcion in
                                    (from solEstadoRecepLlam in this.bdContext.M39SolicitudEstados
                                     join eSolicitudRecepLlam in this.bdContext.P39EstadoSolicituds
                                           on new { solEstadoRecepLlam.IdEstadoSolicitud, EstadoSolicitud = (11).ToString() }
                                       equals new { eSolicitudRecepLlam.IdEstadoSolicitud, eSolicitudRecepLlam.EstadoSolicitud }
                                     group solEstadoRecepLlam by new
                                     } into g
                                     select new
                                         f2_IdSolicitud = g.Key.IdSolicitud,
                                         f2_FechaEstado = g.Min(p => p.FechaEstado)
                                     })) on new { IdSolicitud = tablaSolicitud.IdSolicitud }
                                   equals new { IdSolicitud = tablaSolicitudEstadoRcion.f2_IdSolicitud }
                                       into tablaSolicitudEstadoRcion_join

                            from tablaSolicitudEstadoRcion in tablaSolicitudEstadoRcion_join.DefaultIfEmpty()
                            join tablaSolicitudEstadoUbic in
                                    (from solEstadoUbicacion in this.bdContext.M39SolicitudEstados
                                     join eSolicitudUbicacion in this.bdContext.P39EstadoSolicituds
                                           on new { solEstadoUbicacion.IdEstadoSolicitud, EstadoSolicitud = (51).ToString() }
                                       equals new { eSolicitudUbicacion.IdEstadoSolicitud, eSolicitudUbicacion.EstadoSolicitud }
                                     group solEstadoUbicacion by new
                                     } into f
                                     select new
                                         f3_IdSolicitud = f.Key.IdSolicitud,
                                         f3_FechaEstado = (DateTime?)f.Key.FechaEstado
                                     })) on new { IdSolicitud = tablaSolicitud.IdSolicitud } equals new { IdSolicitud = tablaSolicitudEstadoUbic.f3_IdSolicitud } into tablaSolicitudEstadoUbic_join
                            from tablaSolicitudEstadoUbic in tablaSolicitudEstadoUbic_join.DefaultIfEmpty()
                            join tablaSolicitudConfirm in
                                    (from solEstadoConfirm in this.bdContext.M39SolicitudEstados
                                     join eSolicitudConfirm in this.bdContext.P39EstadoSolicituds
                                           on new { solEstadoConfirm.IdEstadoSolicitud, EstadoSolicitud = (61).ToString() }
                                       equals new { eSolicitudConfirm.IdEstadoSolicitud, eSolicitudConfirm.EstadoSolicitud }
                                     group solEstadoConfirm by new
                                     } into h
                                     select new
                                         f4_Idm39SolicitudEstado = (int?)h.Key.Idm39SolicitudEstado,
                                         f4_IdSolicitud = h.Key.IdSolicitud,
                                         f4_CodigoUsuario = h.Key.CodigoUsuario,
                                         f4_FechaEstado = (DateTime?)h.Max(p => p.FechaEstado),
                                         f4_IdEstadoSolicitud = (int?)h.Key.IdEstadoSolicitud,
                                         f4_IdCausaEstadoSolicitud = h.Key.IdCausaEstadoSolicitud,
                                         f4_Observaciones = h.Key.Observaciones
                                     })) on new { IdSolicitud = tablaSolicitud.IdSolicitud } equals new { IdSolicitud = tablaSolicitudConfirm.f4_IdSolicitud } into tablaSolicitudConfirm_join
                            from tablaSolicitudConfirm in tablaSolicitudConfirm_join.DefaultIfEmpty()
                            select new M39SolicitudRtoDTO
                                IdSolicitud = tablaSolicitud.IdSolicitud,
                                IdTipoSolicitante = tablaSolicitud.IdTipoSolicitante,
                                //FechaRecepcion = tablaSolicitudEstadoRcion.f2_FechaEstado,
                                CodigoSolicitante = tablaSolicitud.CodigoSolicitante,
                                Historia = tablaSolicitud.Historia,
                                DireccionOrigen = tablaSolicitud.DireccionOrigen,
                                PrestadorOrigen = tablaSolicitud.PrestadorOrigen,
                                IdPersonaSolicitante = tablaSolicitud.IdPersonaSolicitante,
                                AutorizacionSolicitante = tablaSolicitud.AutorizacionSolicitante,
                                IdClasificacionTriage = tablaSolicitud.IdClasificacionTriage,
                                DepartamentoOrigen = tablaSolicitud.DepartamentoOrigen,
                                IdApertura = tablaSolicitud.IdApertura,
                                DireccionDestino = tablaSolicitud.DireccionDestino,
                                PrestadorDestino = tablaSolicitud.PrestadorDestino,
                                ComentariosUbicacion = tablaSolicitud.ComentariosUbicacion,
                                DepartamentoDestino = tablaSolicitud.DepartamentoDestino,
                                MunicipioDestino = tablaSolicitud.MunicipioDestino,
                                IdMovil = tablaSolicitud.IdMovil,
                                //FechaDespacho = tablaSolicitudEstadoUbic.f3_FechaEstado,
                                OrdenInternacion = tablaSolicitud.OrdenInternacion,
                                IpsInternacion = tablaSolicitud.IpsInternacion,
                                DocumentoInternacion = tablaSolicitud.DocumentoInternacion,
                                /*f4Idm39SolicitudEstado = tablaSolicitudConfirm.f4_Idm39SolicitudEstado, /// ERROR GENERATED
                                f4IdSolicitud = (int?)tablaSolicitudConfirm.f4_IdSolicitud, /// ERROR GENERATED
                                f4CodigoUsuario = tablaSolicitudConfirm.f4_CodigoUsuario, /// ERROR GENERATED
                                f4FechaConfirm = tablaSolicitudConfirm.f4_FechaEstado,
                                f4IdEstadoSolicitud = tablaSolicitudConfirm.f4_IdEstadoSolicitud,
                                f4IdCausaEstadoSolicitud = tablaSolicitudConfirm.f4_IdCausaEstadoSolicitud,*/
                                f4Observaciones = tablaSolicitudConfirm.f4_Observaciones   /// ERROR GENERATED
                catch (NullReferenceException ex) { 
                return listaM39SolicitudRtoDTO;

    ////// defined class USER ////

    namespace RFASTCUR.Datos.OpenAccess.RTO

        public class M39SolicitudRtoDTO : M39Solicitud
            public DateTime? FechaRecepcion { get; set; }
            public DateTime? FechaDespacho { get; set; }
            public int f4Idm39SolicitudEstado? { get; set; }
            public int f4IdSolicitud? { get; set; }
            public string f4CodigoUsuario { get; set; }
            public DateTime f4FechaConfirm? { get; set; }
            public byte f4IdEstadoSolicitud { get; set; }
            public short? f4IdCausaEstadoSolicitud { get; set; }
            public String f4Observaciones { get; set; }

    M39Solicitud Class Open Access Model

  2. Answer
    Thomas avatar
    588 posts

    Posted 04 Nov 2013 Link to this post

    Hi Camilo,

    that is a complex query! Because OpenAccess is currently not capable to push the whole construct in one piece to the database server, some parts of the query will be executed in memory. Those parts need special attention as null value handling is different from the null handling in the database server.
    In order to fix this query (and the NullReferenceException is in the client side in memory handling) you will need to protect all the accesses of query parts following a .DefaultIfEmpty() expression.
    Which means for example tablaSolicitudEstadoRcion, tablaSolicitudEstadoUbic and tablaSolicitudConfirm accesses must be guarded with expressions like
    x != null ? x.Y : null
    instead of a simple x.Y. This kind of expression is needed when the client executes this statement; for server side code this is not needed all the time.
    Please consider using a more explicit joining in the client approach, where you execute the 3 inner calculations on the server and outer join them then in the client more explicitly. This could help clarifying the intention of the entire expression.

    OpenAccess ORM Q3 2013 simplifies your model operations even further providing you with greater flexibility. Check out the list of new features shipped with our latest release!
  3. DevCraft banner
  4. Camilo
    Camilo avatar
    4 posts
    Member since:
    Oct 2012

    Posted 06 Nov 2013 Link to this post

    thomas thanks for your prompt response, it worked for me x != null ? x.Y : null 

Back to Top