Я пытаюсь преобразовать некоторые SQL-запросы в Linq, чтобы избежать многократных обращений к базе данных.
Старый SQL, который я пытаюсь преобразовать, делает:
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
Итак, я создал два класса С#:
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; }
}
И у меня есть объект List<A>
, который я хочу запросить. Он заполняется из базы данных, поэтому каждый A в списке имеет подсписок с нагрузкой B. Я хочу использовать Linq-to-objects для запроса этого списка.
Поэтому мне нужно использовать Linq, чтобы получить среднее время между началом A и завершением его дочерних B, а также среднее время между началом и завершением каждого B. Я не писал оригинальный SQL, поэтому я не совсем уверен, что он делает то, что должен!
Мне нужно рассчитать несколько таких средних, поэтому я хотел бы сделать их все в одном волшебном запросе Linq. Это возможно?