Groupby转换为另一个组

时间:2018-10-13 11:01:51

标签: c# entity-framework linq group-by linq-to-sql

我有一个

IGrouping<string, MyObj> 

我想将其转换为另一个IGrouping。出于争论的考虑,密钥是相同的,但是MyObj会转换为MyOtherObj,即

IGrouping<string, MyOtherObj>.

我正在使用Linq2Sql,但我可以复制最后一点而不能将其转换为sql。

我希望它仍然是IGrouping,因为它是一种可识别的类型,并且我希望签名和结果是显而易见的。我也希望能够做到这一点,这样我就可以将我的链接断开一点并放入标记更好的方法中。即

GetGroupingWhereTheSearchTextAppearsMoreThanOnce()
RetrieveRelatedResultsAndMap()

捆绑并返回包装在iEnumberable中-毫无疑问是怎么回事。

我通过菊花链来接近

IQueryable<IGrouping<string, MyObj>> grouping ....

IQueryable<IGrouping<string, IEnumerable<MyOtherObj>>> testgrouping = grouping.GroupBy(gb => gb.Key, contacts => contacts.Select(s => mapper.Map<MyObj, MyOtherObj>(s)));

但我最终得到

IGrouping<string, IEnumberable<MyOtherObj>>

我知道这是因为我正在访问IGrouping表示的枚举,但是我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

您可以使用SelectMany(x => x)将分组弄平,然后再次执行GroupBy,但是显然您要进行两次工作。

您应该能够在第一个GroupBy调用中进行投影。

或者,您可以按照此处What is the implementing class for IGrouping?的说明添加自己的IGrouping实现,然后只需执行以下操作:

groups.Select(g => new MyGrouping(g.Key, g.Select(myObj => Mapper.Map<MyObj,MyOtherObj>(myObj))))