Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找每行C的结果#_C#_Linq - Fatal编程技术网

C# 查找每行C的结果#

C# 查找每行C的结果#,c#,linq,C#,Linq,我的数据库表如下所示: ScannerStatusHistoryID DetectorID TimeStamp HBD1 HBD2 HWD1 HWD2 RC1 RC2 RC3 RC4 1 948 2017-03-17 08:44:34.0000000 +01:00 3 3 3

我的数据库表如下所示:

ScannerStatusHistoryID  DetectorID                 TimeStamp                    HBD1    HBD2    HWD1    HWD2    RC1    RC2     RC3      RC4
          1                 948         2017-03-17 08:44:34.0000000 +01:00       3        3      3        0      3      3       0        3
          2                 948         2017-03-17 09:44:34.0000000 +01:00       3        3      3        0      3      3       0        3
          3                 948         2017-03-17 10:44:34.0000000 +01:00       3        2      3        0      3      3       0        3
          4                 948         2017-03-17 11:44:34.0000000 +01:00       3        2      3        0      3      3       0        1
          5                 948         2017-03-17 12:44:34.0000000 +01:00       3        2      3        0      3      3       0        1
[Query]
        public IQueryable<ScannerStatusHistory> GetScannerStatus(int detectorID)
        {
            var lastRow = ObjectContext.ScannerStatusHistories.Where(t => t.DetectorID == detectorID).OrderByDescending(d => d.TimeStamp).FirstOrDefault();
            //Get last changed row
            if (lastRow != null)
            {
                var lastChangeRow = ObjectContext.ScannerStatusHistories
                .Where(t => t.DetectorID == detectorID
                    && (t.HBD1 != lastRow.HBD1 || t.HBD2 != lastRow.HBD2 || t.HWD1 != lastRow.HWD1 || t.HWD2 != lastRow.HWD2 || t.RC1 != lastRow.RC1 || t.RC2 != lastRow.RC2 || t.RC3 != lastRow.RC3 || t.RC4 != lastRow.RC4))
                .OrderByDescending(d => d.TimeStamp)
                .FirstOrDefault();
                //Return next row
                if (lastChangeRow != null)
                {
                    return ObjectContext.ScannerStatusHistories
                     .Where(x => lastChangeRow.TimeStamp < x.TimeStamp
                         && x.DetectorID == detectorID)
                     .OrderBy(d => d.TimeStamp)
                     .Take(1);
                }
            }
            return ObjectContext.ScannerStatusHistories.Where(t => t.DetectorID == detectorID).OrderBy(d => d.TimeStamp).Take(1);
        } 
我有这样一个问题:

ScannerStatusHistoryID  DetectorID                 TimeStamp                    HBD1    HBD2    HWD1    HWD2    RC1    RC2     RC3      RC4
          1                 948         2017-03-17 08:44:34.0000000 +01:00       3        3      3        0      3      3       0        3
          2                 948         2017-03-17 09:44:34.0000000 +01:00       3        3      3        0      3      3       0        3
          3                 948         2017-03-17 10:44:34.0000000 +01:00       3        2      3        0      3      3       0        3
          4                 948         2017-03-17 11:44:34.0000000 +01:00       3        2      3        0      3      3       0        1
          5                 948         2017-03-17 12:44:34.0000000 +01:00       3        2      3        0      3      3       0        1
[Query]
        public IQueryable<ScannerStatusHistory> GetScannerStatus(int detectorID)
        {
            var lastRow = ObjectContext.ScannerStatusHistories.Where(t => t.DetectorID == detectorID).OrderByDescending(d => d.TimeStamp).FirstOrDefault();
            //Get last changed row
            if (lastRow != null)
            {
                var lastChangeRow = ObjectContext.ScannerStatusHistories
                .Where(t => t.DetectorID == detectorID
                    && (t.HBD1 != lastRow.HBD1 || t.HBD2 != lastRow.HBD2 || t.HWD1 != lastRow.HWD1 || t.HWD2 != lastRow.HWD2 || t.RC1 != lastRow.RC1 || t.RC2 != lastRow.RC2 || t.RC3 != lastRow.RC3 || t.RC4 != lastRow.RC4))
                .OrderByDescending(d => d.TimeStamp)
                .FirstOrDefault();
                //Return next row
                if (lastChangeRow != null)
                {
                    return ObjectContext.ScannerStatusHistories
                     .Where(x => lastChangeRow.TimeStamp < x.TimeStamp
                         && x.DetectorID == detectorID)
                     .OrderBy(d => d.TimeStamp)
                     .Take(1);
                }
            }
            return ObjectContext.ScannerStatusHistories.Where(t => t.DetectorID == detectorID).OrderBy(d => d.TimeStamp).Take(1);
        } 
但这只是因为1列已更改。所以它会抓住那一排。 但是,是否可以为每一行检查此项,并显示该列已更改的日期。而不是当1列已更改时

因此,预期的结果将是:

HBD1 = 2017-03-17 08:44:34.0000000 +01:00 
HBD2 = 2017-03-17 10:44:34.0000000 +01:00 
HWD1 = 2017-03-17 08:44:34.0000000 +01:00 
HWD2 = 2017-03-17 08:44:34.0000000 +01:00 
RC1 = 2017-03-17 08:44:34.0000000 +01:00 
RC2 = 2017-03-17 08:44:34.0000000 +01:00 
RC3 = 2017-03-17 08:44:34.0000000 +01:00 
RC4 = 2017-03-17 11:44:34.0000000 +01:00 
我现在得到的结果:

HBD1 = 2017-03-17 11:44:34.0000000 +01:00
HBD2 = 2017-03-17 11:44:34.0000000 +01:00
HWD1 = 2017-03-17 11:44:34.0000000 +01:00
HWD2 = 2017-03-17 11:44:34.0000000 +01:00 
RC1 = 2017-03-17 11:44:34.0000000 +01:00
RC2 = 2017-03-17 11:44:34.0000000 +01:00
RC3 = 2017-03-17 11:44:34.0000000 +01:00
RC4 = 2017-03-17 11:44:34.0000000 +01:00

这可以在一个查询中完成,还是我必须执行8个单独的查询来检查每个列的更改状态?

如果您看到重复的最后一个值,那么您很可能忘记了某个位置。只需快速浏览一下-看起来您只设置了比较行(lastRow)仅在查询前一次-这不允许您比较行之间的差异。您将只找到与初始状态的差异,初始状态按时间降序为11.44:34行。