using AsbCloudApp.Requests; using AsbCloudDb.Model; using AsbCloudInfrastructure; using AsbCloudInfrastructure.Repository; using Microsoft.Extensions.Caching.Memory; using System; using System.Linq; using System.Threading; namespace ConsoleApp1 { class Program { private static AsbCloudDbContext db = ServiceFactory.Context; // use ServiceFactory to make services static void Main(/*string[] args*/) { DependencyInjection.MapsterSetup(); var sw = System.Diagnostics.Stopwatch.StartNew(); var idTelemetry = 5; var query = db.Set() .Where(t => t.IdTelemetry == idTelemetry) .Where(t => t.BlockPosition > 0.0001) .Where(t => t.WellDepth > 0.0001) .Where(t => t.WellDepth - t.BitDepth < 0.01) .GroupBy(t => new { H = t.DateTime.Hour, W = Math.Truncate(t.WellDepth!.Value) }) .Select(g => new { Count = g.Count(), DateMin = g.Min(t => t.DateTime), DateMax = g.Max(t => t.DateTime), WellDepthMin = g.Min(t => t.WellDepth), WellDepthMax = g.Max(t => t.WellDepth), Pressure = g.Average(t => t.Pressure), PressureSp = g.Average(t => t.PressureSp), PressureSpRotor = g.Average(t => t.PressureSpRotor), PressureSpSlide = g.Average(t => t.PressureSpSlide), PressureIdle = g.Average(t => t.PressureIdle), PressureDeltaLimitMax = g.Average(t => t.PressureDeltaLimitMax), AxialLoad = g.Average(t => t.AxialLoad), AxialLoadSp = g.Average(t => t.AxialLoadSp), AxialLoadLimitMax = g.Average(t => t.AxialLoadLimitMax), RotorTorque = g.Average(t => t.RotorTorque), RotorTorqueSp = g.Average(t => t.RotorTorqueSp), RotorTorqueIdle = g.Average(t => t.RotorTorqueIdle), BlockSpeed = g.Average(t => t.BlockSpeed), BlockSpeedSp = g.Average(t => t.BlockSpeedSp), BlockSpeedSpRotor = g.Average(t => t.BlockSpeedSpRotor), BlockSpeedSpSlide = g.Average(t => t.BlockSpeedSpSlide), }) .Where(s => s.WellDepthMin != s.WellDepthMax) .Where(s => s.Count > 3) .OrderBy(t => t.DateMin); var data = query.ToArray(); sw.Stop(); Console.WriteLine($"total time: {sw.ElapsedMilliseconds} ms"); var count = data.Length; Console.ReadLine(); } } }