Sto provando a convertire alcune query SQL in Linq per evitare più viaggi nel database.Linq: calcola più medie in una query
Il vecchio SQL che sto cercando di convertire lo fa:
SELECT
AVG(CAST(DATEDIFF(ms, A.CreatedDate, B.CompletedDate) AS decimal(15,4))),
AVG(CAST(DATEDIFF(ms, B.CreatedDate, B.CompletedDate) AS decimal(15,4)))
FROM
dbo.A
INNER JOIN
dbo.B ON B.ParentId = A.Id
Così ho creato due classi C#:
class B
{
public Guid Id { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime CompletedDate { get; set; }
}
class A
{
public Guid Id { get; set; }
public DateTime CreatedDate { get; set; }
public List<B> BList { get; set; }
}
E ho un oggetto List<A>
che voglio query. È popolato dal database, quindi ogni A nell'elenco ha una sotto-lista con un carico di Bs. Voglio usare Linq-to-objects per interrogare questo elenco.
Quindi ho bisogno di usare Linq per ottenere il tempo medio tra l'inizio di una A e il completamento dei suoi figli B, e il tempo medio tra l'inizio e il completamento di ogni B. Non ho scritto l'SQL originale, quindi non sono del tutto sicuro che faccia quello che dovrebbe!
Ho alcune di queste medie da calcolare, quindi mi piacerebbe farle tutte all'interno di una query Linq magica. È possibile?
Grazie, questo funziona perfettamente! Sono andato con l'opzione di aggregazione separata - questo rende le cose un po 'più chiare. –