Linq:如何通过多对多关系进行分组
本文关键字:关系 何通过 Linq | 更新日期: 2023-09-27 18:06:12
我有一个像next这样的实体项目:
class Item
{
int Id;
string Name;
int GroupId;
virtual Group Group; //refers to Group table
string Size;
virtual ICollection<Set> Sets; //refers to many-to-many relation
}
所以我想把所有的项目分组如下:
ICollection<IGrouping<string, Item>> list = AllItems.GroupBy(x => x.Group.Name).ToList();
ICollection<IGrouping<string, Item>> list = AllItems.GroupBy(x => x.Size).ToList();
我想要相同的,但是用集合。这有可能吗?
澄清。例如,Item1包含在每一个集合中,那么我想在分组结束时按集合下一个列表:
Set 1
Item 1
Item 2
Set 2
Item 1
Item 3
Set 3
Item 1
Item 4
.....
注意,我需要相同的结构ICollection<IGrouping<string, Item>>
,在代码中传递它。我在想也许要创建一个中间结构,它可以接受ICollection<IGrouping<string, Item>>
和包含我的项目的set列表?
SelectMany
+ GroupBy
与值选择器:
ICollection<IGrouping<string, Item>> list = AllItems
.SelectMany(x => x.Sets
.Select(y => new
{
Key = y,
Value = x
}))
.GroupBy(x => x.Key.Name, x => x.Value)
.ToList();