2011-08-03 80 views
1

好吧,我有一个3列的列表视图控件:Linq到SQL,聚合列,按日期分组到列表视图

年| NetTotal | GrossTotal

还我有一个表称为订单几列,它们包含订单的相关信息,并存储它们属于客户的ID。

的问题是:如何可以查询该表与(优选地)LINQ(DataContext的是从LinqToSql)返回以下数据?

我想搜索与匹配的客户ID中的任何条目,其发生的情况,他们年组,分别总结了汇总,并将它们添加到ListView?

我现在我可以使用LAMDA表达式和聚合,它只是不清楚如何(选项推断上,DB是一个DataContext对象,客户ID是一个Int32变量):

Dim Orders = (From order In db.Orders Where order.CustomerID = CustomerID).GroupBy(Function(p) p.Date.Year).GetEnumerator 

我想我不得不创建一个匿名类型如下所示:

Dim tmpYears = From prevs In db.Orders Select New With {.CustID = prevs.CustomerID, .Year = prevs.PaymentDate.Year, .NetPurchase, .GrossPurchase} 

但是我怎么聚集了一批在购买列?

Dim CustomerOrders = From ord In db.Orders Where Ord.CustomerID = custID Select ord 
Dim tot = From O in CustomerOrders Select Aggregate netTot In O Into Sum(netTot.Price * netTot.Quantity * 1+ (netTot.Discount/100)) 

我想合并两者。

有什么建议吗? (我读过this但我想它在LINQ的,因为它是一个团队项目,我们同意使用LINQ,而不是发送.ExecuteQuerys并等至db.Also它的一个LinqToSQL解决方案,这样会更好,如果我可以做一些使用它)

回答

1

我不能保证我理解您的需求完全是,但长话短说,似乎要显示的订单,按年分组,与毛/净值,其中订单匹配提供客户ID汇总金额?

很抱歉,如果语法稍有出来,但我这样做是写意......

Dim results = db.Orders.Where(Function(n) n.CustomerId = customerId).GroupBy(Function(n) n.Date.Year, Function(key, values) New With {.Year = key, .NetTotal = values.Sum(Function(n) n.NetPurchase * n.Quantity * (1 + (n.Discount/100))), .GrossTotal = values.Sum(Function(n) n.GrossPurchase)}) 

这应该为您提供一个匿名类型与YearNetTotal,并且GrossTotal填充按照我列出的要求。

编辑:另外道歉的一个衬垫,但我敢肯定,你可以重新格式化它的味道。

+0

我留下深刻的印象,谢谢,另外:我喜欢线上;) – Qqbt

+0

我也是一个很大的粉丝,即使知道单行是(或可能是)坏消息。你的问题的诀窍是'GroupBy'上的重载,但你现在可能已经发现了。我使用的是具有'resultSelector'的重载,我发现它是所有选项中我最喜欢的内容之一。 :-) – Smudge202

+0

你是对的,这是最好的部分(与大多数linq查询一样),结果是可枚举的....生活在IT领域很棒......有时候:)感谢您的出色答案 – Qqbt