Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

611
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!