我为客户及其订单提供以下代码。我想列出所有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() };
}
答案 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设置为数据源。