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,以避免混淆