es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo utilizar la consulta SQL con pivot() en EntityFramework Core 5.0

SELECT BuildingID,
       BuildingName,

       [-1] AS 'In Active',
       [0]  'Booked',
       [1]  'Occupied',
       [2]  'Vacant',
       [3]  'Temporary Booked',
       [4]  'Under Clearance',
       [5]  'Under Construction',
       [6]  'Reserved',
       [7]  'Temporary Leased',
       [8]  'Paid Booked',
       [9]  'Booking Payment Pending',

       Total=(SELECT Sum(TB.total_count)
              FROM   (VALUES([-1]),([0]),([1]),([2]),([3]),([4]),([5]),([6]),([7]),([8]),([9])) AS TB(total_count))

FROM   (SELECT b.buildingid,
               b.BuildingName,
               f.FacStatusID,
               f.FacilityNo
        FROM   Facility AS f
               INNER JOIN FacilityBuilding b
                       ON f.BuildingID = b.BuildingID
        WHERE  FacilityTypeID =1
               AND FacilitySubTypeID = @facilitySubTypeId and f.BuildingID=@buildingId) AS SourceTable
       PIVOT ( Count(FacilityNo)
             FOR FacStatusId IN ([-1],[0],[1],[2],[3],[4],[5],[6],[7],[8],[9]) ) AS pivottable
ORDER  BY BuildingID; 

Necesito convertir esta consulta a Entity Framework o utilizar este procedimiento almacenado allí. No tengo ninguna entidad en mi contexto de base de datos relacionada con este resultado. Pero tengo entidades separadas como facilities y facilityBuildings donde buildingId es la clave principal y sirve como clave externa en la tabla de facilities.
También adjunté la captura de pantalla del resultado deseado.
Por favor, ayúdeme con cómo podemos utilizar esta consulta para obtener el resultado adjunto deseado utilizando Entity Framework Core 5.0.

enter image description here

Necesito convertir esta consulta a Entity Framework o utilizar este procedimiento almacenado allí. No tengo ninguna entidad en mi contexto de base de datos relacionada con este resultado. Pero tengo entidades separadas como facilities y facilityBuildings donde buildingId es la clave principal y sirve como clave externa en la tabla de facilities.
También adjunté la captura de pantalla del resultado deseado.
Por favor, ayúdeme con cómo podemos utilizar esta consulta para obtener el resultado adjunto deseado utilizando Entity Framework Core 5.0.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para utilizar esta consulta con Entity Framework Core, puedes seguir los siguientes pasos:

    1. Crea un contexto de base de datos que incluya las entidades Facility y FacilityBuilding.
    2. Define una nueva clase de modelo que represente el conjunto de resultados del procedimiento almacenado:

      public class BuildingFacilityStatus
      {
         public int BuildingId { get; set; }
         public string BuildingName { get; set; }
         public int InActive { get; set; }
         public int Booked { get; set; }
         public int Occupied { get; set; }
         public int Vacant { get; set; }
         public int TemporaryBooked { get; set; }
         public int UnderClearance { get; set; }
         public int UnderConstruction { get; set; }
         public int Reserved { get; set; }
         public int TemporaryLeased { get; set; }
         public int PaidBooked { get; set; }
         public int BookingPaymentPending { get; set; }
         public int Total { get; set; }
      }
      

    3. Crea un procedimiento almacenado en tu base de datos que devuelva el conjunto de resultados deseado.
    4. Mapea BuildingFacilityStatus al procedimiento almacenado utilizando el método DbContext.Database.SqlQuery<t>:

      public List<buildingfacilitystatus> GetBuildingFacilityStatus(int facilitySubTypeId, int buildingId)
      {
         var result = _context.Database.SqlQuery<buildingfacilitystatus>(
             "EXEC [dbo].[Tu_Procedimiento_Almacenado] @facilitySubTypeId=@p0, @buildingId=@p1",
             facilitySubTypeId, buildingId).ToList();
      
         return result;
      }
      

      Nota: _context es la instancia de tu contexto de base de datos.

    5. Llama al método GetBuildingFacilityStatus con los parámetros requeridos y utiliza el resultado para mostrar los datos.

      var facilitySubTypeId = 1;
      var buildingId = 1;
      
      var result = GetBuildingFacilityStatus(facilitySubTypeId, buildingId);
      // Utiliza el resultado para mostrar los datos
      

      Nota: También puedes agregar manejo de errores y otras mejoras necesarias al código.

Comments are closed.