F #.У меня есть список transactions
следующего типа:
type Transaction(Debitor: string, Spend:float, Creditor:string) =
member this.Debitor = Debitor
member this.Spend = Spend
member this.Creditor = Creditor
Я знаю, как группировать по одному значению.Скажем, например, что я хочу сгруппировать по свойству Debitor
, это свойство легко использовать в качестве ключа группы:
let tsGroupDebitor =
transactions
|> Seq.groupBy(fun ts -> ts.Debitor)
Однако мне не удается сгруппировать по двум значениям, скажем Debitor
и Creditor
.В идеале я хотел бы сгруппировать с учетом Debitor
AND Creditor
, применяя агрегаторную функцию «Сумма» для свойства Spend
.
Другими словами , я быхотел бы получить эквивалент F # следующего запроса LINQ:
var transactions_GroupSameDebitorCreditor =
transactions
.GroupBy(ts => new { ts.Debitor, ts.Creditor }) // group by multiple values
.Select(gr => new
{
Debitor = gr.Key.Debitor,
Debit = gr.Sum(trans => trans.Spend), //sum the trans values per grouped relationships
Creditor = gr.Key.Creditor
});
, где был возвращен IEnumerable анонимного типа.