Еще один способ думать об этом состоит в том, что у вас есть две последовательности:
- Транзакции
- индекс "автоинкремент"
получить одну последовательность транзакций с идентификаторами.Когда мы хотим объединить две последовательности, мы можем использовать оператор Zip
:
viewModel.GroupedTransactions = transactionData
.GroupBy(x => new { DocumentId = x.DocumentId ?? "Un Documented" })
.Zip(Enumerable.Range(0, int.MaxValue), (x, index) => new GroupedTransaction
{
DocumentId = x.Key.DocumentId,
Transactions = x.Select(y => new Transaction
{
Amount = y.CommitAmount,
ActivityType = y.ActivityType,
Number = index
})
})
.OrderBy(x => x.DocumentId);
Это то, что вы имели в виду?
Zip объединяет две последовательности, пока не достигнет концаодна из последовательностей.Вот почему все хорошо, Enumberable.Range, чтобы получить гораздо больший диапазон чисел, чем нам на самом деле нужно.