2009-07-08 68 views
1

内joning我想翻译成Linq的这一点,并不能弄明白:多个分组,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

首先,很高兴知道你无法弄清楚什么。如果你完全迷失了,并且不知道从哪里开始,那么你需要谷歌来进行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 2009-07-08 15:29:15