Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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# 基于时间间隔的linq查询_C#_Sql_Asp.net Mvc_Linq - Fatal编程技术网

C# 基于时间间隔的linq查询

C# 基于时间间隔的linq查询,c#,sql,asp.net-mvc,linq,C#,Sql,Asp.net Mvc,Linq,数据包含每分钟的条目,但我只需要每5分钟的数据,例如: 我目前的数据: [12:00, 12:02, 12:03, 12:04, 12:05, 12:06, 12:07, 12:08, 12:09, 12:10, 12:11, 12:12, 12:13, 12:14, 12:15, 12:16, 12:17, 12:18, 12:19, 12:20] 我的目标是: [12:00, 12:05, 12:10, 12:20,] 我的林克: public ActionResult GetD

数据包含每分钟的条目,但我只需要每5分钟的数据,例如:

我目前的数据:

[12:00, 12:02, 12:03, 12:04, 12:05, 12:06, 12:07, 12:08, 12:09, 12:10, 12:11, 12:12, 12:13, 12:14, 12:15, 12:16, 12:17, 12:18, 12:19, 12:20]
我的目标是:

[12:00, 12:05, 12:10, 12:20,]
我的林克:

    public ActionResult GetData()
    {

        FireViewModel _fireViewModel = new FireViewModel();
        var query = (from w1 in db.V_PDCPowerDemandArchiveForMis
            where db.V_LastEafHeat.Any(w2 => w1.DATE >= w2.StartTime)
            orderby w1.DATE descending
            select w1).Take(20).ToList();

        foreach (var item in query)
        {
            _fireViewModel.Power.Add(item.EAF1);
            _fireViewModel.Date.Add(item.DATE.ToShortTimeString());
        }

        return PartialView("_Fire",_fireViewModel);
    }

我假设您想要实现的是将您的记录分组,以便您可以找到属于12:00到12:05范围的记录,以及属于12:05到12:10范围的记录,等等

然后你需要用00、05、10等来替换你的时间的一分钟部分。 你可以通过做一轮来做到这一点。将第二部分强制转换为float,除以5:02变为0.4,08变为1.6,依此类推。然后使用舍入(n,0)舍入到下一个整数,0.2变为0,而0.8变为2。一旦完成,乘以5,你的数字就会从5跳到5。见下面的例子

DECLARE @Nu TABLE (valsec CHAR(2), valfloat FLOAT)
INSERT INTO @Nu (valsec) VALUES ('01')
INSERT INTO @Nu (valsec) VALUES ('02')
INSERT INTO @Nu (valsec) VALUES ('03')
INSERT INTO @Nu (valsec) VALUES ('04')
INSERT INTO @Nu (valsec) VALUES ('05')
INSERT INTO @Nu (valsec) VALUES ('06')
INSERT INTO @Nu (valsec) VALUES ('07')
INSERT INTO @Nu (valsec) VALUES ('08')
INSERT INTO @Nu (valsec) VALUES ('09')
INSERT INTO @Nu (valsec) VALUES ('10')
INSERT INTO @Nu (valsec) VALUES ('11')
INSERT INTO @Nu (valsec) VALUES ('12')
INSERT INTO @Nu (valsec) VALUES ('13')
INSERT INTO @Nu (valsec) VALUES ('14')
INSERT INTO @Nu (valsec) VALUES ('15')
INSERT INTO @Nu (valsec) VALUES ('16')
INSERT INTO @Nu (valsec) VALUES ('17')
INSERT INTO @Nu (valsec) VALUES ('18')
INSERT INTO @Nu (valsec) VALUES ('19')
INSERT INTO @Nu (valsec) VALUES ('20')
UPDATE @Nu SET valfloat = CAST (valsec AS FLOAT) / 5
SELECT 
    valsec,
    valfloat,
    ROUND (valfloat,0)*5 AS secint,
    RIGHT (CAST (( ROUND (valfloat,0)*5 + 100) AS VARCHAR(3) ),2) AS secchar
FROM @Nu 
结果:

01  0.2 0   00
02  0.4 0   00
03  0.6 5   05
04  0.8 5   05
05  1   5   05
06  1.2 5   05
07  1.4 5   05
08  1.6 10  10
09  1.8 10  10
10  2   10  10
11  2.2 10  10
12  2.4 10  10
13  2.6 15  15
14  2.8 15  15
15  3   15  15
16  3.2 15  15
17  3.4 15  15
18  3.6 20  20
19  3.8 20  20
20  4   20  20
注:本节

RIGHT (CAST (( ROUND (valfloat,0)*5 + 100) AS VARCHAR(3) ),2) 

仅通过添加100并获取最后两个字符将数字转换为字符(2)(这样您得到的是05而不是5)

键是w1。分钟%5==0我应该在foreach中设置如下条件:

 public ActionResult GetFuranceOne()
    {
        FireViewModel _fireViewModel  = new FireViewModel();

        var query = (from w1 in db.V_PDCPowerDemandArchiveForMis
                     where db.V_LastEafHeat.Any(w2 => w1.DATE >= w2.StartTime)
                     orderby w1.DATE descending
                     select w1).Take(50);


        foreach (var item in query.ToList())
        {
            if (item.DATE.Minute % 5==0)
            {
                _fireViewModel.Power.Add(item.EAF1);
                _fireViewModel.Date.Add(item.DATE.ToShortTimeString());
            }
        }
        return PartialView("_Fire", _fireViewModel);
    }

只是日期,还是有一些相关数据需要平均或求和?您需要更好地显示相关代码和相关数据类型。也就是说,解决方案的想法很简单:编写一个函数,将时间序列数据映射到适当的存储桶中。一旦你有了这个映射,你可以在你的
GroupBy
callyes中简单地使用这个函数,有一个属性,它叫做Power属性。功率值取决于日期值这并不完全清楚,但看起来需要根据“分钟数是5的倍数”谓词进行筛选,例如:“where w1.Minute%5==0”。是的,关键是我应该执行w1.Minute%5==0