Linq to sql,聚合列,按日期分组到列表视图
Posted
技术标签:
【中文标题】Linq to sql,聚合列,按日期分组到列表视图【英文标题】:Linq to sql, aggregate columns ,group by date into listview 【发布时间】:2011-08-03 14:23:44 【问题描述】:好的,所以我有一个包含 3 列的列表视图控件:
年份 |净总额 |总额
我还有一个名为 Orders 的表,其中包含几列,它们包含有关订单的信息并存储它们所属的客户的 ID。
问题是:如何使用(最好)linq(数据上下文来自 LinqToSql)查询该表以返回以下数据?
我想搜索与发生的匹配 CustomerID 的任何条目,按年份对它们进行分组,分别汇总总计并将它们添加到列表视图?
我现在可以使用 lamda 表达式和聚合,只是不清楚如何(选项推断,db 是数据上下文对象,CustomerID 是 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。它也是一个LinqToSQL 解决方案,所以如果我能做一些会更好使用它)
【问题讨论】:
【参考方案1】:我不能保证我完全理解您的要求,但长话短说,您似乎想要显示按年份分组的订单以及净/总价值的总和,其中订单与提供的 CustomerID 匹配?
对不起,如果语法有点不对,但我是徒手做的......
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))
这应该会为您提供一个匿名类型,其中根据我列出的要求填充了 Year
、NetTotal
和 GrossTotal
。
编辑:也为一个班轮道歉,但我相信你可以重新格式化它以适应口味。
【讨论】:
我也是一个忠实的粉丝,即使知道单行是(或可能是)坏消息。你的问题的诀窍是GroupBy
的重载,但你现在可能已经发现了。我正在使用具有resultSelector
的重载,当涉及到一个衬垫时,我发现它是我最喜欢的所有选项。 :-)
你是对的,这其中最好的部分(与大多数 linq 查询一样)结果是可数的......在 IT 领域的生活很棒......有时 :) 感谢很好的答案以上是关于Linq to sql,聚合列,按日期分组到列表视图的主要内容,如果未能解决你的问题,请参考以下文章