c# – 如何使用LINQ合并来自多个IEnumerable的结果
发布时间:2020-12-15 07:54:05 所属栏目:百科 来源:网络整理
导读:我可以有多个(最多5个)IEnumerable ResortSupplier并希望将它们合并为单个IEnumerable ResortSupplier按SupplierCode分组.我的对象看起来像这样: 这是我的对象: [Serializable]public class ResortSupplier{ public string SupplierCode { get; set; } pub
我可以有多个(最多5个)IEnumerable< ResortSupplier>并希望将它们合并为单个IEnumerable< ResortSupplier>按SupplierCode分组.我的对象看起来像这样:
这是我的对象: [Serializable] public class ResortSupplier { public string SupplierCode { get; set; } public IList<Product> ResortProducts { get; set; } } [Serializable] public class Product { public string Code { get; set; } //Other fields... public IList<PerPricing> PricingDetail { get; set; } } [Serializable] public class PerPricing { //Other fields.. public decimal? Price { get; set; } public Error PricingError { get; set; } } 多个IEnumerable中的数据可能如下所示: ---------------------------------------- IEnumerable<ResortSupplier> - 1 Hyatt Resort Standard Room PricingDetail-1 Superior Room PricingDetail-1 Sandals Resort Standard Room PricingDetail-1 Delux Room PricingDetail-1 ---------------------------------------- IEnumerable<ResortSupplier> - 2 Hyatt Resort Standard Room PricingDetail-2 Superior Room PricingDetail-2 One Bed Room Suit PricingDetail-2 Sandals Resort Standard Room PricingDetail-2 Honeymoon Suit PricingDetail-2 ---------------------------------------- IEnumerable<ResortSupplier> - 3 ..... ---------------------------------------- IEnumerable<ResortSupplier> - 4 ..... ---------------------------------------- IEnumerable<ResortSupplier> - 5 ..... ---------------------------------------- 我的综合结果应包含: IEnumerable<ResortSupplier> - Consolidated Hyatt Resort Standard Room PricingDetail-1 PricingDetail-2 Superior Room PricingDetail-1 PricingDetail-2 Bed Room Suit PricingDetail-2 Sandals Resort Standard Room PricingDetail-1 PricingDetail-2 Delux Room PricingDetail-1 Honeymoon Suit PricingDetail-2 ---------------------------------------- 处理这个问题的最佳方法是什么?我尝试了简单的IEnumerable.Union和GroupBy子句,但没有得到我想要的结果. 解决方法
我想你想要的东西:
// You can construct this with an array if it isn't already in this form. IEnumerable<IEnumerable<ResortSupplier>> supplierLists = ... var query = from suppliers in supplierLists from supplier in suppliers group supplier by supplier.SupplierCode into g let products = g.SelectMany(s => s.ResortProducts) .GroupBy(p => p.Code) .Select(prodGroup => new Product { Code = prodGroup.Key,PricingDetail = prodGroup .SelectMany(p => p.PricingDetail) .ToList() }) select new ResortSupplier { SupplierCode = g.Key,ResortProducts = products.ToList() }; 这是一个非常可怕的查询.我强烈建议将查询的不同组件分解为单独的(命名良好的)方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |