LINQ - 嵌套计数问题

时间:2011-09-12 17:49:06

标签: c# .net asp.net sql vb.net

我为客户及其订单提供以下代码。我想列出所有customerID和相应的订单数量。如何使用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 个答案:

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

答案 1 :(得分:0)

您已经完成了这项工作,现在您可以将结果迭代为:

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

答案 2 :(得分:0)

根据您的评论更新我的答案:

您根本不需要执行from .. select。只需迭代customerRecordsBook并写下您想要的内容:

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

或者,更好的是,使用诸如Repeater或GridView之类的控件,并将customerRecordsBook设置为数据源。