我无法对我的结构进行分组。分组需要由子财产完成。我Sellers
(List<SellerModel>
)与Products
(List<ProductModel>
)。每个产品都有Category
(CategoryId
)。作为输入,我有List<SellerModel>
。作为输出我需要类别列表。 (List<CategoryModel>
)
我需要的模型结构如下:
public class CategoryModel
{
public Guid Id {get;set;}
public List<SellerModel> Sellers { get; set; }
}
public class SellerModel
{
public Guid Id {get;set;}
public List<ProductModel> Products { get; set; }
}
public class ProductModel
{
public Guid Id {get;set;}
public string Name {get;set;}
public Guid CategoryId {get;set;} // THIS IS THE PROPERTY TO GROUP BY
}
现在我必须按ProductModel.CategoryId
分组。
因此,结果结构是List<CategoryModel>
,但它不是一个简单的类别列表。它将列出包含卖家和产品的列表。
如果您有卖不同类别产品的卖家列表,请进行成像。现在您需要了解所有可用的不同类别。此外,您还必须知道哪个卖家销售特定类别的产品。
我试图做一些分组,但我对LinQ很新,我认为这不是基本的分组。我相信我不明白如何在这里进行分组的逻辑。
var t = sellers.GroupBy(x => x.Products.Select(y => y.CategoryId)).Select(a => a.Key)
答案 0 :(得分:2)
问题是您在尝试分组之前跳过了几个步骤。
以下内容应该能够满足您的需求:
// obtain a set of all { CategoryId, Seller } pairs
var n = sellers.SelectMany(s => s.Products.Select(p => new {
p.CategoryId,
Seller = s
}))
// group those by CategoryId
.GroupBy(cs => cs.CategoryId)
// create a CategoryModel from each group
.Select(g => new CategoryModel {
Id = g.Key,
Sellers = g.Select(cp => cp.Seller).ToList()
})
//make a list
.ToList();
答案 1 :(得分:1)
分组函数适用于列表和列表中所有元素共享的属性。
您有两个选择: