2011-08-03 79 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