好的,我有一个包含3列的listview控件:
年| NetTotal | GrossTotal
我还有一个名为Orders的表,其中有几列,它们包含有关订单的信息并存储它们所属的客户的ID。
问题是:如何用(最好)linq(datacontext来自LinqToSql)查询该表以返回以下数据?
我想搜索发生匹配的CustomerID的任何条目,按年份对它们进行分组,分别计算总计并将它们添加到列表视图中?
我现在可以使用lamda表达式和聚合,它只是不清楚如何(选项推断,db是一个datacontext对象,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.Also它的LinqToSQL解决方案,所以如果我可以更好好好利用它。)
答案 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)})
这应该为您提供一个匿名类型,其中Year
,NetTotal
和GrossTotal
按照我列出的要求填充。
编辑:也为一个班轮道歉,但我相信你可以重新格式化它。