如何使用linq重写这个foreach循环?

时间:2010-10-16 04:34:57

标签: c# linq foreach

假设我有两个类,即客户和订单,其中一个客户可以与其关联一个或多个订单。

class Customer
{
  Order[] Orders;
}

class Order
{
  int OrderId;
}

如果对于任何给定的客户,我想找到所有相关的OrderId,是否有一种简单的方法可以使用linq?与下面的foreach解决方案产生相同结果的东西:

List<int> allOrderIds = new List<int>();
foreach (Order thisOrder in thisCustomer)
{
   allOrderIds.Add(thisOrder.OrderId);
}

TIA。

3 个答案:

答案 0 :(得分:8)

var allOrderIds = thisCustomer.Orders.Select(o => o.OrderId).ToList();

答案 1 :(得分:1)

您可以使用许多人创建的扩展方法:

public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
    foreach(T item in enumeration)
    {
        action(item);
    }
}

并像这样使用它:

thisCustomer.Orders.ForEach(c => allOrderIds.Add(o.OrderId));

答案 2 :(得分:0)

使用select方法。如果你想对它们做很多linq语句,你也应该将Orders保持为List。

thisCustomer.Orders.ToList().Select(o => o.OrderId).ToList();