Групповая трансформация в другую группу - PullRequest
0 голосов
/ 13 октября 2018

У меня есть

IGrouping<string, MyObj> 

Я хочу преобразовать его в другую IGrouping.Для аргументации ключ тот же, но MyObj преобразуется в MyOtherObj, т. Е.

IGrouping<string, MyOtherObj>.

Я использую Linq2Sql, но я могу скопировать этот последний бит, не преобразуя его в sql.

Iхочу, чтобы это все еще было IGrouping, потому что это распознанный тип, и я хочу, чтобы подпись и результат были очевидны.Я также хочу иметь возможность сделать это, чтобы я мог разорвать свою ссылку на abit и использовать методы с лучшими метками.то есть

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 голосов
/ 13 октября 2018

Вы можете просто сгладить группировки с помощью SelectMany (x => x), а затем снова выполнить GroupBy, но тогда вы, очевидно, выполняете работу дважды.

Вместо этого вы сможете выполнять проекцию как часть первого вызова GroupBy.

Кроме того, вы можете добавить собственную реализацию IGrouping, как описано здесь Что такое реализациякласс для IGrouping? , тогда просто сделайте:

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