using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
public enum AlarmSeverityLevel
ReallyReallyReallyBad = 3,
public static void Main()
var stopwatch = new Stopwatch();
Foo((o) => {count += o.Count;});
var timeSpan = stopwatch.Elapsed;
Console.WriteLine("Total elapsed Timespan = {0}, count = {1}", timeSpan, count);
static void Foo(Action<IList> businessLogicFunction)
var alarms = from healthIssue in _context.HealthIssues.AsNoTracking()
join asset in _context.Assets.AsNoTracking() on healthIssue.AssetNumber equals asset.SerialNumber into joinedTable
from data in joinedTable.DefaultIfEmpty()
var alarmsViewModelList = await alarms.ToListAsync();
var alarms = Enumerable.Range(0, 30000).Select(i =>
AssetNumber = 202 + (i % 12000),
Crew = "no idea what this is",
AlarmSeverityLevel = (AlarmSeverityLevel)((i + 1) % 5),
AlarmLastUpdatedTime = DateTime.Now,
var alarmsViewModelList = alarms.ToList();
var groupedData = alarmsViewModelList.Select(c => new { c.AssetNumber, c.AlarmName }).Distinct().ToList();
var filteralarms = (alarmsViewModelList.Where(c => c.AlarmSeverityLevel != AlarmSeverityLevel.Unknown).ToList());
for (int j = 0; j < groupedData.Count; j++)
var alarm = groupedData[j];
var alarmlist = filteralarms.AsEnumerable().Where(c => c.AlarmName == alarm.AlarmName && c.AssetNumber == alarm.AssetNumber
AlarmLastUpdateDateTime = c.AlarmLastUpdatedTime,
AlarmSeverityLevel = c.AlarmSeverityLevel,
}).OrderByDescending(c =>c.AlarmLastUpdateDateTime).ToList();
int alarmCount = alarmlist.Count;
businessLogicFunction(alarmlist);
public static class DateTimeHelpers
public static DateTime FromEpochSecondsUTC(long seconds) => DateTime.UtcNow;