c# – 如何使用LINQ合并来自多个IEnumerable的结果

我可以有多个(最多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()                              
            };

这是一个非常可怕的查询.我强烈建议将查询的不同组件分解为单独的(命名良好的)方法.

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...