private static ImmutableSortedDictionary <DateTime, State> AddOrUpdateStatesDictAndCleanOld( ImmutableSortedDictionary <DateTime, State> states, State newState, DateTime now) { var minEventTime = now - TimeSpan.FromMinutes(1); var old = states.Keys.SkipWhile(e => e < minEventTime); states = states.RemoveRange(old); if (states.TryGetValue(now, out var oldState)) { newState = new State(oldState, newState); } return(states.SetItem(now, newState)); }