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.