【发布时间】:2015-05-18 22:32:52
【问题描述】:
我有以下 linq 查询:
(From document In DocumentEntities
Group Join transactionRow In TransactionEntities.Where(Function(tran) tran.PaymentType = "Charge" And tran.Amount <> 0 And (Not tran.Void.HasValue OrElse (tran.Void.HasValue AndAlso Not tran.Void.Value)))
On document.DocumentId Equals transactionRow.DocumentId
Into foundTransactions = Group
From foundTransaction In foundTransactions.DefaultIfEmpty()
Group Join documentInstrument In DocumentInstrumentEntities.Where(Function(docInst) docInst.IsPrimary)
On document.DocumentId Equals documentInstrument.DocumentId
Into relatedDocumentInstruments = Group
From documentInstrument In relatedDocumentInstruments.DefaultIfEmpty()
Join instrument In InstrumentEntities
On documentInstrument.InstrumentId Equals instrument.InstrumentId
Where (document.DocumentId = 241083 OR document.DocumentId = 241084 OR document.DocumentId = 241085 OR document.DocumentId = 241086 OR document.DocumentId = 241087 OR document.DocumentId = 241090 OR document.DocumentId = 241091 OR document.DocumentId = 241092 OR document.DocumentId = 241093 OR document.DocumentId = 241094 OR document.DocumentId = 241095 OR document.DocumentId = 241096 OR document.DocumentId = 241097 OR document.DocumentId = 241098 OR document.DocumentId = 241099 OR document.DocumentId = 241100 OR document.DocumentId = 241101 OR document.DocumentId = 241088 OR document.DocumentId = 241089)
Order By instrument.Name
Select New With
{
.Amount = foundTransaction.Amount,
.Code = instrument.Code,
.Instrument = instrument.Name,
.InstrumentId = instrument.InstrumentId,
.Pages = document.Pages
}).GroupBy(Function(instrument) new with {instrument.Code, instrument.Instrument})
.Select(Function(grouping) new with {.Code = grouping.Key.Code, .Instrument = grouping.Key.Instrument})
这给了我一个很好的、按 Instrument.name 排序的工具和代码的分组列表。现在我需要知道如何访问实际分组中的项目来执行聚合函数。例如,我希望在最终结果中返回 SUM(amount),但我不确定如何访问每个键的实际 IGrouping,以便获得所需的聚合。
所以,例如,我希望我的新 FINAL 选择看起来像这样:
.Select(Function(grouping) new with {.Code = grouping.Key.Code, .Instrument = grouping.Key.Instrument, .Amount = SUM(grouping.amount)})
我知道聚合函数中会有一个 lambda,但我只是伪代码,所以我可以尝试解释我所追求的。
感谢您的帮助!
【问题讨论】: