public ICollection <KeyValuePair <string, int> > GetRunTimeForOpMode(DateTime fromTime, DateTime toTime) { var sw = new Stopwatch(); if (!Connect(false)) { m_protocolManager.WriteToProtocolFile($"Method {StackTraceUtil.GetCurrentMethod()} failed! Failed to connect to database"); return(null); } sw.Start(); var retval = new Collection <KeyValuePair <string, int> >(); var from = m_sqlConnection.ColumnValueAsString(fromTime, DataTypes.DateTime); var to = m_sqlConnection.ColumnValueAsString(toTime, DataTypes.DateTime); var machineStates = m_sqlConnection.ReadDataFromDB("TraceMachineStates", "Time_Stamp between " + from + " And " + to, "Time_Stamp"); var measuredTimepans = new Dictionary <string, TimeSpan>(); for (var i = 0; i < machineStates.Count; i++) { var timeStamp1 = machineStates[i].GetValue <DateTime>("Time_Stamp"); var timeStamp2 = i < machineStates.Count - 1 ? machineStates[i + 1].GetValue <DateTime>("Time_Stamp") : toTime; var opMode = machineStates[i].GetValue <string>("State"); if (measuredTimepans.ContainsKey(opMode)) { measuredTimepans[opMode] += timeStamp2 - timeStamp1; } else { measuredTimepans.Add(opMode, timeStamp2 - timeStamp1); } } sw.Stop(); foreach (var timeSpan in measuredTimepans) { retval.Add(new KeyValuePair <string, int>(timeSpan.Key, (int)timeSpan.Value.TotalMinutes)); } return(retval); }