C# 获取数据库中两个不同日期的最后一个条目并计算差异

C# 获取数据库中两个不同日期的最后一个条目并计算差异,c#,linq,C#,Linq,我有一个表格,大约每15分钟记录一次变频器的信息。逆变器发送的数据之一是kwhtotal,该数字表示通过该逆变器产生的总功率。我正试图得到正确的查询,以获得特定一天的发电量。为此,我需要检索前一天的最后一次读数,并将其与当天的最后一次读数进行比较 以下是我到目前为止的情况: DateTime prevStartD = new DateTime((utcStartingDate.AddDays(i - 1)).Year, (utcStartingDate.AddDays(i - 1)).Month

我有一个表格,大约每15分钟记录一次变频器的信息。逆变器发送的数据之一是
kwhtotal
,该数字表示通过该逆变器产生的总功率。我正试图得到正确的查询,以获得特定一天的发电量。为此,我需要检索前一天的最后一次读数,并将其与当天的最后一次读数进行比较

以下是我到目前为止的情况:

DateTime prevStartD = new DateTime((utcStartingDate.AddDays(i - 1)).Year, (utcStartingDate.AddDays(i - 1)).Month, (utcStartingDate.AddDays(i - 1)).Day, 0, 0, 0);
DateTime prevEndD = new DateTime((utcStartingDate.AddDays(i - 1)).Year, (utcStartingDate.AddDays(i - 1)).Month, (utcStartingDate.AddDays(i - 1)).Day, 23, 59, 59);

var previousDay = (from s in db.PowerInverterHistorys
                   join u in db.PowerInverters on s.inverter_id equals u.id
                   where u.name == record && (s.recordTime >= prevStartD && s.recordTime <= prevEndD)
                   orderby s.recordTime descending
                   select new
                   {
                       s.recordTime,
                       s.kwhtotal
                   }).Take(1);

DateTime currStartD = new DateTime((utcStartingDate.AddDays(i)).Year, (utcStartingDate.AddDays(i)).Month, (utcStartingDate.AddDays(i)).Day, 0, 0, 0);
DateTime currEndD = new DateTime((utcStartingDate.AddDays(i)).Year, (utcStartingDate.AddDays(i)).Month, (utcStartingDate.AddDays(i)).Day, 23, 59, 59);

var currentDay = (from s in db.PowerInverterHistorys
                  join u in db.PowerInverters on s.inverter_id equals u.id
                  where u.name == record && (s.recordTime >= currStartD && s.recordTime <= currEndD)
                  orderby s.recordTime descending
                  select new
                  {
                      s.recordTime,
                      s.kwhtotal
                  }).Take(1);

double? pDay = 0, cDay = 0;
foreach (var p in previousDay) { pDay = p.kwhtotal; }
foreach (var c in currentDay) { cDay = c.kwhtotal; }

var generatedPower = cDay - pDay;
DateTime previstartd=新日期时间((utcStartingDate.AddDays(i-1)).Year,(utcStartingDate.AddDays(i-1)).Month,(utcStartingDate.AddDays(i-1)).Day,0,0);
DateTime prevEndD=新日期时间((utcStartingDate.AddDays(i-1)).Year,(utcStartingDate.AddDays(i-1)).Month,(utcStartingDate.AddDays(i-1)).Day,23,59,59);
var previousDay=(从数据库中的s开始)
将u连接到s.inverter上的db.PowerInverters_id等于u.id

如果u.name==record&&(s.recordTime>=prevStartD&&s.recordTime=currStartD&&s.recordTime可以将这两个查询合并为一个查询,并且限制s.recordTime>=prevStartD&&s.recordTime
var previousDay=(从db.powers中的s开始)
将u连接到s.inverter上的db.PowerInverters_id等于u.id

其中u.name==record&&(s.recordTime>=prevStartD&&s.recordTime正在更改db an选项?它可能会中断规范化,但存储这两个值的表(仅限当前版本)将大大简化事情。或者如果可能,创建Materialized视图。我确实将这两个查询移到了它们所在的foreach之外,并将结果存储在列表中。然后在查询中,我使用了一个包含Max()的查询。现在性能非常好。
var previousDay = (from s in db.PowerInverterHistorys
                   join u in db.PowerInverters on s.inverter_id equals u.id
                   where u.name == record && (s.recordTime >= prevStartD && s.recordTime <= prevEndD)
                   orderby s.recordTime descending
                   select new
                   {
                       s.recordTime,
                       s.kwhtotal
                   }).Take(1);