I have the following code:
member this.ProcessEvent(sourceStream: OrderResponse) =
match sourceStream.Action with
| Action.Partial
| Action.Insert ->
sourceStream.Data
|> Seq.iter (fun x -> this.orderState.[x.OrderId] <- this.ConvertFullOrder x)
| Action.Update ->
sourceStream.Data
|> Seq.iter (fun x -> this.orderState.[x.OrderId] <- this.UpdateOrder x this.orderState.[x.OrderId])
| Action.Delete ->
sourceStream.Data
|> Seq.iter (fun x -> this.orderState.Remove(x.OrderId) |> ignore)
| _ -> ()
It is processing a list of events and an action. The data is processed and stored in a dictionary. The action tells to insert, update or delete some of the records and applies to all the events received in the same message.
For each case, I iterate through the sourceStream.Data list.
Is there a better / more readable way where I can declare I am going to process that list and then, based on the Action, have different code? this would allow to remove the multiple sourceStream.Data |>
bits and specify it only once.