我无法对我的结构进行分组。分组需要通过子属性来完成。我有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)
最佳答案
问题是您在尝试分组之前跳过了几个步骤。
以下应该会产生您要查找的内容:
// 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();
关于c# - linq 按子对象属性分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30217231/