2009-07-08 2 views
1

Я пытаюсь перевести это в Linq и не могу понять:множественная группировка, внутренняя joning в Linq

SELECT 
    CustomerOrder.ShipState, MONTH(OrderFulfillment.OrderDate) AS Mnth, 
    YEAR(OrderFulfillment.OrderDate) AS Yer, 
    SUM(OrderFulfillment.Tax) AS TotalTax 
FROM 
    OrderFulfillment INNER JOIN 
     CustomerOrder ONOrderFulfillment.OrderID =CustomerOrder.OrderID 
WHERE 
    (OrderFulfillment.Tax > 0) 
GROUP BY 
    CustomerOrder.ShipState, MONTH(OrderFulfillment.OrderDate), 
    YEAR(OrderFulfillment.OrderDate) 
ORDER BY 
    YEAR(OrderFulfillment.OrderDate) DESC, CustomerOrder.ShipState, 
    MONTH(OrderFulfillment.OrderDate) DESC 

У меня есть LINQPad и пошел через кучу примеров, но не могу понять это.

ответ

0

Я думаю, что вы хотите сделать что-то вроде этого:

from c in CustomerOrder 
    join o in OrderFulfillment on c.OrderId equals o.OrderId 
where 
    o.Tax > 0 
group o by 
    new { c.ShipState, Mnth = of.OrderDate.Month, Yer = of.OrderDate.Year } 
     into g 
orderby 
    g.Key.Yer descending, g.ShipState, g.Key.Mnth descending 
select 
    new { g.Key.ShipState, g.Key.Mnth, g.Key.Yer, 
    TotalTax = g.Sum(i => i.Tax) }; 

Я не пробовал скомпилировать его, но я думаю, что это то, что вам нужно.

Идея состоит в том, что сначала вы выполняете свое соединение, чтобы связать клиентов и заказы. Затем примените условие фильтра.

В этот момент вы хотите получить все заказы, которые имеют определенную группу, поэтому применяется оператор группы.

Наконец, закажите результаты, затем выберите всю информацию из ключей для каждой группы и суммируйте налог в каждой группе.

0

Прежде всего, было бы хорошо знать, что именно вы не можете понять. Если вы полностью потеряли и не знаете, с чего начать, вам нужно google для присоединения и группировки linq.

Вот что-то я в последнее время, что может (возможно) направить вас в правильном направлении:

// This groups items by category and lists all category ids and names 
from ct in Categories 
    join cst in Category_Subtypes 
    on ct.Category_Id equals cst.Category_Id 
    join st in Subtypes 
    on cst.Subtype_Id equals st.Subtype_Id 
where 
    st.Type_Id == new Guid(id) 
group ct by new { ct.Category_Id, ct.Display_Text } into ctg 
select new 
{ 
    Id = ctg.Key.Category_Id, 
    Name = ctg.Key.Display_Text 
} 
+0

Это была большая помощь - спасибо! – Slee

Смежные вопросы