2011-09-12 176 views
2

我對客戶及其訂單有以下代碼。我想列出所有的客戶ID和相應的訂單數量。我如何使用LINQ實現它?LINQ - 嵌套計數問題

注意:我是LINQ和var的新手。

protected void Page_Load(object sender, EventArgs e) 
{ 

    List<Order> orderListForCus1 = new List<Order>(); 
    Order ord1 = new Order(1, new DateTime(2011, 9, 1)); 
    Order ord2 = new Order(1, new DateTime(2011, 8, 1)); 
    orderListForCus1.Add(ord1); 
    orderListForCus1.Add(ord2); 

    Customer cus1 = new Customer(); 
    cus1.CustomerID = 1; 
    cus1.OrderList = orderListForCus1; 


    List<Customer> customerRecordsBook = new List<Customer>(); 
    customerRecordsBook.Add(cus1); 


    var orderCounts = from c in customerRecordsBook 
         select new { c.CustomerID, OrderCount = c.OrderList.Count() }; 



} 
+3

你已經有了。你在問什麼? – SLaks

+2

使用普通的'foreach'。 – SLaks

回答

3

你快到了。
你也可以遍歷您的匿名類型的對象,就像任何其他對象:

foreach (var o in orderCounts) { 
    Response.Write(o.CustomerID + ": " + o.OrderCount + " orders"); 
} 

注意o必須聲明爲var,因爲類型還沒有名字,你可以使用。


就你而言,你並不需要LINQ;你可以直接使用List<T>

foreach (var c in customerRecordsBook) { 
    Response.Write(c.CustomerID + ": " + c.OrderList.Count + " orders"); 
} 
0

你已經這樣做了,現在你可以遍歷throught結果爲:

foreach(var item in orderCounts) 
{ 
    Console.WriteLine("{0},{1}", item.CustomerID, item.OrderCount); 
} 
+2

'new {c.CustomerID,...'是隱式命名的。 – SLaks

+0

@SLaks:哦,是的...從答案中刪除了這部分。 – Nawaz

0

更新基於您的評論我的回答:

你不需要做from .. select在所有。只是想迭代customerRecordsBook,寫你想要什麼:

foreach (var c in customerRecordsBook) 
{ 
    Response.Write(string.Format("ID: {0}, Orders: {1}<br />", 
     c.CustomerID, c.OrderList.Count); 
} 

或者,更好的是,使用控制,如中繼器或GridView控件,並設置customerRecordsBook作爲數據源。

+2

否;你不需要那個。 – SLaks

+0

我喜歡在SO上學習新東西。從來不知道這個捷徑。謝謝! – gilly3