Ale*_*lex 7 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; }
}
Run Code Online (Sandbox Code Playgroud)
多个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
.....
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
我的综合结果应包含:
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
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
处理这个问题的最佳方法是什么?我尝试了简单的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()
};
Run Code Online (Sandbox Code Playgroud)
但这确实是一个看起来很可怕的查询。我强烈建议将查询的不同组成部分分解为单独的(命名良好的)方法。