2014-09-29 138 views
1

我有以下數據結構(只是一個示例性的視覺表示)的陣列:循環嵌套選擇LINQ

list<customer> 
{ 
    customer 
    { 
     name 
     orders[] 
     { 
      order 
      { 
       quantity 
       product 
       { 
        price 
       } 
      } 
      order 
      { 
       ... 
      } 
      order 
      { 
       ... 
      } 
    } 
    customer 
    { 
     ... 
    } 
    customer 
    { 
     ... 
    } 
} 

我想要獲得每個客戶的名字和他的訂單的總和(數量*產品價格)。現在,我有以下幾點:

var sumEachCust = from c in customers 
        let sum = 0.0m 
        select new 
        { 
        c.Name, 
        sum =+ (from o in c.Orders 
          select o.Product.Price * o.Quantity).FirstOrDefault() 
        };  

如果Customer對象在其Orders[]多個Order條目,那麼我想裏面的所有帳目的總和。但是通過這個查詢,我得到了第一個訂單的總和。

如果我做這樣說:

​​

然後我會得到的名字多次有在Customer對象的Orders[]產權制度的實體,我不希望出現這種情況。

簡單地說 - 僅僅是所有訂單的名稱和總和。

回答

7
from c in customers 
select new 
{ 
    Name = c.name, 
    OrderTotal = c.orders.Sum(o => o.product.price * o.quantity) 
} 

如果你真的使用let那麼這裏就是你會怎麼做,對於這種情況下

from c in customers 
let sum = c.orders.Sum(o => o.product.price * o.quantity) 
select new 
{ 
    Name = c.name, 
    OrderTotal = sum 
} 
+0

作品,是一個非常乾淨和簡單的解決方案!非常感謝!然而,你能否給我一個在查詢中使用'let'和臨時變量的例子,因爲我正在這樣做,並希望看到在這種情況下如何正確使用嵌套'select'語句? – Milkncookiez 2014-09-29 09:20:27

+0

@Milkncookiez看到更新,雖然你真的不需要在這裏使用'let'。 – James 2014-09-29 09:28:43

+0

對不起,我想問一個帶有「嵌套select」的例子,因爲例如,如果我必須將所有客戶的訂單彙總爲一個總額(而不是分別總結每個客戶的訂單),那麼如何我會那樣做嗎? (鑑於我不完全確定如何使用嵌套查詢的迭代邏輯)。 – Milkncookiez 2014-09-29 12:36:11