我有一个
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表示的枚举,但是我不知道该怎么做。
答案 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))))