微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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()                              
            };

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐