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

613
Vistas
¿Cómo puedo convertir mi consulta SQL de trabajo a Linq (C#)?

Tengo una consulta SQL en funcionamiento que devuelve los resultados que quiero en SQL Server:

 SELECT SUM(CriticalCount) As CriticalCount, SUM(HighCount) As HighCount, SUM(MediumCount) As MediumCount, SUM(LowCount) As LowCount, Timestamp FROM [dbo].[TicketCounts] GROUP BY Timestamp ORDER BY Timestamp DESC

El conjunto de resultados es:

Recuento crítico HighCount Recuento medio LowCount marca de tiempo
32 15 18 3 2021-07-01 11:00:00
24 10 42 15 2021-06-30 10:00:00

En mi TicketCountRepository de mi proyecto .Net Core 5.0, quiero que este método devuelva los mismos resultados:

 public async Task<IEnumerable<TicketCount>> GetTicketCounts() { return await _dbContext.TicketCounts .GroupBy(o => o.Timestamp) .Select(tc => new TicketCount { CriticalCount = tc.Sum(o => o.CriticalCount), HighCount = tc.Sum(o => o.HighCount), MediumCount = tc.Sum(o => o.MediumCount), LowCount = tc.Sum(o => LowCount) }).OrderByDescending(o => o.Timestamp).toListAsync(); }

El código se compila bien, pero cuando presiono este método en el controlador TicketCount , aparece un error 500:

System.InvalidOperationException: la expresión LINQ DbSet().GroupBy(keySelector: o => o.Timestamp, elementSelector o => o).Select(e => new TicketCount { CriticalCount = e.Sum(s => s.CriticalCount) , HighCount = e.Sum(s => s.HighCount), MediumCount = e.Sum(s => s.MediumCount), LowCount = e.Sum(s => s.LowCount)}).OrderByDescending(e0 => e0.Timestamp) no se pudo traducir. Vuelva a escribir la consulta en un formulario que se pueda traducir o cambie a la evaluación del cliente explícitamente insertando una llamada a 'AsEnumerable', 'AsAsyncEnumerable', 'ToList' o 'ToListAsync'.

¿Qué estoy haciendo mal? ¿Debo usar algo que no sea linq para obtener el conjunto de resultados necesario?

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

0

El tipo que está consultando es incorrecto, es el tipo de retorno en lugar del tipo que contiene los datos sin procesar. Quieres algo como:

 return await _dbContext.Tickets .GroupBy(o => o.Timestamp) .Select(x => new TicketCount { Timestamp = x.Key, CriticalCount = x.Sum(o => o.CriticalCount), HighCount = x.Sum(o => o.HighCount), MediumCount = x.Sum(o => o.MediumCount), LowCount = x.Sum(o => LowCount) }).OrderByDescending(x => x.Timestamp).toListAsync();
over 4 years ago · Santiago Trujillo Denunciar

0

Como no selecciona la marca de tiempo, muévala antes de seleccionar

 return await _dbContext.TicketCounts .GroupBy(o => o.Timestamp) .OrderByDescending(o => o.Timestamp) .Select(tc => new TicketCount { CriticalCount = tc.Sum(o => o.CriticalCount), HighCount = tc.Sum(o => o.HighCount), MediumCount = tc.Sum(o => o.MediumCount), LowCount = tc.Sum(o => LowCount) }).ToListAsync();

o puede intentar agregar la propiedad Timestamp a TicketCount y agregarla a Select.

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