Linq to sql,聚合列,按日期分组到listview

时间:2011-08-03 14:23:44

标签: sql vb.net linq linq-to-sql datacontext

好的,我有一个包含3列的listview控件:

年| NetTotal | GrossTotal

我还有一个名为Orders的表,其中有几列,它们包含有关订单的信息并存储它们所属的客户的ID。

问题是:如何用(最好)linq(datacontext来自LinqToSql)查询该表以返回以下数据?

我想搜索发生匹配的CustomerID的任何条目,按年份对它们进行分组,分别计算总计并将它们添加到列表视图中?

我现在可以使用lamda表达式和聚合,它只是不清楚如何(选项推断,db是一个datacontext对象,CustomerID是一个i​​nt32变量):

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 个答案:

答案 0 :(得分: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)})

这应该为您提供一个匿名类型,其中YearNetTotalGrossTotal按照我列出的要求填充。

编辑:也为一个班轮道歉,但我相信你可以重新格式化它。