Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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#_Mysql_.net_Entity Framework - Fatal编程技术网

C# 如何使用实体框架选择离今天最近的日期?

C# 如何使用实体框架选择离今天最近的日期?,c#,mysql,.net,entity-framework,C#,Mysql,.net,Entity Framework,我有一个像这样的MySQL数据库 Id Name StartTime 1 test1 2021-02-21 08:15:00 2 test2 2021-02-11 18:00:00 3 test3 2021-02-24 14:00:00 4 test4 2021-02-10 10:30:00 5 test5 2021-02-23 09:00:00 6 test6 2021-02-26 16:00:0

我有一个像这样的MySQL数据库

Id    Name     StartTime
1     test1    2021-02-21 08:15:00
2     test2    2021-02-11 18:00:00
3     test3    2021-02-24 14:00:00
4     test4    2021-02-10 10:30:00
5     test5    2021-02-23 09:00:00
6     test6    2021-02-26 16:00:00
7     test7    2021-02-23 12:00:00
8     test8    2021-02-15 17:00:00
我想得到从今天(2021-02-20)开始的5个最接近的日期。 我期待这样的结果:

2021-02-26
2021-02-24
2021-02-23
2021-02-21
2021-02-15
我尝试使用以下代码:

var result = _context.EventItems
                .FromSqlRaw("Select * from Event ORDER BY ABS(`StartTime` - CURRENT_TIMESTAMP()) LIMIT 5")
                .Select(e => e.StartTime.Date)
                .ToList();
结果是:

2021-02-24
2021-02-23
2021-02-23
2021-02-21
2021-02-15

问题是2021-02-23的副本。我该如何解决我的问题?谢谢

考虑以下几点;我使用“12:00:00”(与“00:00:00”相反)作为比较时间,因为对我来说,24日比15日更接近20日似乎更直观

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,name VARCHAR(12) NOT NULL UNIQUE
,start_time DATETIME NOT NULL
);

INSERT INTO my_table  VALUES
(1,'test1','2021-02-21 08:15:00'),
(2,'test2','2021-02-11 18:00:00'),
(3,'test3','2021-02-24 14:00:00'),
(4,'test4','2021-02-10 10:30:00'),
(5,'test5','2021-02-23 09:00:00'),
(6,'test6','2021-02-26 16:00:00'),
(7,'test7','2021-02-23 12:00:00'),
(8,'test8','2021-02-15 17:00:00');

SELECT *
     , SEC_TO_TIME(ABS(UNIX_TIMESTAMP(start_time)-UNIX_TIMESTAMP('2021-02-20 12:00:00')))x  
  FROM my_table 
 ORDER 
    BY x ;
+----+-------+---------------------+-----------+
| id | name  | start_time          | x         |
+----+-------+---------------------+-----------+
|  1 | test1 | 2021-02-21 08:15:00 | 20:15:00  |
|  5 | test5 | 2021-02-23 09:00:00 | 69:00:00  |
|  7 | test7 | 2021-02-23 12:00:00 | 72:00:00  |
|  3 | test3 | 2021-02-24 14:00:00 | 98:00:00  |
|  8 | test8 | 2021-02-15 17:00:00 | 115:00:00 |
|  6 | test6 | 2021-02-26 16:00:00 | 148:00:00 |
|  2 | test2 | 2021-02-11 18:00:00 | 210:00:00 |
|  4 | test4 | 2021-02-10 10:30:00 | 241:30:00 |
+----+-------+---------------------+-----------+

当您想要从多个sql行中生成一个sql行时,需要使用GROUPBY。有关日期问题的具体示例,请参见此处。。。按StartTime DESC使用
顺序
和按StartTime使用
分组
@草莓,这是胡说八道,这是
独特的
的目的<代码>SELECT DISTINCT语句仅用于返回不同的值。。我没有安装MySQL,您至少可以解释原因并进行说明。“重点是,DISTINCT没有解决OP的问题,这是对MySQL的数学运算符如何处理日期的误解,而不仅仅是否决并称之为胡说八道。”@LeeStevens。至于在线工具,实际上我更喜欢db-fiddle.com,但无论如何,我离题了。。。