Не уверен, что это просто дурная привычка или правильный способ ведения дел, но для больших сложных запросов к отчетам, охватывающих кучу таблиц, я часто получаю свою совокупную статистику путем суммирования оператора Case
.
Например:
SELECT Contact.Name,
SUM(CASE WHEN Order.Type = 'Special' THEN 1 ELSE 0 END) AS SpecialOrders,
SUM(CASE WHEN Order.Type = 'Magic' THEN 1 ELSE 0 END) AS MagicOrders,
FROM Contact
LEFT JOIN Order ON (Contact.ContactID = Order.ContactID)
Как бы я сделал это в LINQ to SQL? (В vb.net, но я думаю, что любой пример .Net подойдет)
Dim Orders = _
From Order In DB.Orders
Select New With {.Name = Contact.Name,
.Special = If(Order.Type = "Special", 1, 0),
.Magical = If(Order.Type = "Magical ", 1, 0)}
Мне нужно сложить значения .Special
и .Magical
.
(На самом деле запрос охватывает несколько таблиц, состоящих из информации о бронировании событий, и решение суммировать запись или нет зависит от полей в нескольких из них)