C# 如何将数组拆分为id相同的多个数组linq

C# 如何将数组拆分为id相同的多个数组linq,c#,arrays,linq,C#,Arrays,Linq,我有一个数组: OrderProduct[] OrderProductsOrder = new OrderProduct[] { new OrderProduct { OrderID = 1, ProductID = 2, OrderCustomerID = 1 }, new OrderProduct { OrderID = 2, ProductID = 1, OrderCustomerID = 1 }, new OrderProduct { OrderID = 1, ProductID

我有一个数组:

OrderProduct[] OrderProductsOrder = new OrderProduct[] { 
new OrderProduct { OrderID = 1, ProductID = 2, OrderCustomerID = 1 }, 
new OrderProduct { OrderID = 2, ProductID = 1, OrderCustomerID = 1 }, 
new OrderProduct { OrderID = 1, ProductID = 3, OrderCustomerID = 1 }, 
new OrderProduct { OrderID = 2, ProductID = 1, OrderCustomerID = 2 }, 
new OrderProduct { OrderID = 1, ProductID = 2, OrderCustomerID = 3 }, 
new OrderProduct { OrderID = 2, ProductID = 1, OrderCustomerID = 3 }};
如何使用linq将此数组拆分为三个数组,按CustomerID排序。 结果应该是这三个数组:

OrderProduct[] Customer1Order = new OrderProduct[] { 
new OrderProduct { OrderID = 1, ProductID = 2, OrderCustomerID = 1 }, 
new OrderProduct { OrderID = 2, ProductID = 1, OrderCustomerID = 1 }, 
new OrderProduct { OrderID = 1, ProductID = 3, OrderCustomerID = 1 }};

OrderProduct[] Customer2Order = new OrderProduct[] 
{new OrderProduct { OrderID = 2, ProductID = 1, OrderCustomerID = 2 }};

OrderProduct[] Customer3Order = new OrderProduct[] {  
new OrderProduct { OrderID = 1, ProductID = 2, OrderCustomerID = 3 }, 
new OrderProduct { OrderID = 2, ProductID = 1, OrderCustomerID = 3 }};

已编辑,删除了
GroupBy()
建议,因为它是多余的(Innat3提供)

根本没有理由使用
GroupBy()
,只需使用
Where

OrderProduct[] Customer1Order = OrderProductsOrder.Where(o => o.OrderCustomerID == 1).ToArray();

OrderProduct[] Customer2Order = OrderProductsOrder.Where(o => o.OrderCustomerID == 2).ToArray();

OrderProduct[] Customer3Order = OrderProductsOrder.Where(o => o.OrderCustomerID == 3).ToArray();

首先,按照OrderCustomerID对条目进行分组,并从每个组构造一个数组。之后,将组添加到字典:

var byCustId = OrderProductsOrder
    .GroupBy(p => p.OrderCustomerID)
    .ToDictionary(g => g.Key, g => g.ToArray());
现在,您可以使用
TryGetValue
运算符[]
获取单个数组:

OrderProduct[] customer2Order;
if (byCustId.TryGetValue(2, out customer2Order) {
    ... // Use customer2Order array
}

是否考虑使用GROMPBY(x= > x.OrthCuuleRID)?您的代码无效,如果要用.WORD条件,使用:OrthPosie[] Cuule1Drord= OrthPosithStordsOrl(O==O.OrthCuuleRead=1),则不需要GROUPBY。在我的僵尸思维中,我完全忽略了这一点。你说得对。不过可能想用o.OrderCustomerID替换o.Key,以避免混淆