Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

205
Vistas
¿Es posible combinar consultas pequeñas en una sola consulta?

Tengo las siguientes consultas:

 var truckCount = await DbContext.Trucks .Where(t => t.Departure == null) .CountAsync(); var firstTruck = await DbContext.Trucks .Where(t => t.Departure == null) .MinAsync(t => t.Arrival); var railcarCount = await DbContext.Railcars .Where(r => r.Departure == null) .CountAsync(); var firstRailcar = await DbContext.Railcars .Where(t => t.Departure == null) .MinAsync(t => t.Arrival);

¿Alguien puede decirme si es posible combinar estas consultas en una sola para que solo haya un viaje de ida y vuelta a la base de datos?

Estaría buscando generar una consulta como esta.

 select (select count(*) from Trucks where Departure is null) as TruckCount, (select min(Arrival) from Trucks where Departure is null) as FirstTruck, (select count(*) from Railcars where Departure is null) as RailcarCount, (select min(Arrival) from Railcars where Departure is null) as FirstRailcar

Mi backend es SQL Server.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

No con linq, no. ¿Por qué? Por dos razones:

  1. La sintaxis de consulta no tiene forma de contar y usar la unión para obtener de una consulta
  2. Recuento de métodos, es de ejecución inmediata y no diferida, por lo que no se puede encadenar en una consulta

Para ser honesto, eso sería difícil de lograr incluso con una consulta sql ya que los datos tienen diferentes tipos de datos y columnas.

over 4 years ago · Santiago Trujillo Denunciar

0

Debe usar una biblioteca de terceros que permita ejecutar múltiples consultas en un solo viaje de ida y vuelta a la base de datos. Tal vez esta extensión con sus consultas futuras funcione para usted.

De lo contrario, podría implementar un procedimiento almacenado que encapsule las consultas (como subconsultas) y devuelva la información deseada.

Otra opción podría ser simplemente usar 2 consultas en lugar de 4:

 var truckInfo = await DbContext.Trucks .GroupBy(t => t.Departure == null) .Where(g => g.Key == true) .Select(g => new { Count = g.Count(), FirstTruck = g.Min(t => t.Arrival) }) .FirstOrDefaultAsync() ?? new { Count = 0, FirstTruck = DateTime.MinValue }; // same for Railcars
over 4 years ago · Santiago Trujillo Denunciar

0

Por si acaso, existe la extensión linq2db.EntityFrameworkCore de EF Core (tenga en cuenta que soy uno de los creadores) que puede ejecutar esta consulta y casi cualquier consulta SQL ANSI a través de LINQ

 using var db = DbContext.CreateLinqToDBConnection(); var trucks = DbContext.Trucks .Where(t => t.Departure == null); var railcars = DbContext.Railcars .Where(r => r.Departure == null); var result = await db.SelectAsync(() => new { TruckCount = trucks.Ccount(), FirstTruck = trucks.Min(t => t.Arrival), RailcarCount = railcars.Count(), FirstRailcar = railcars.Min(t => t.Arrival) });
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda