将日期时间转换为日期或默认方法

本文关键字:日期 默认 方法 转换 时间 | 更新日期: 2023-09-27 18:36:56

我想制作一个保存日期和时间的系统,但首先我想检查操作是否没有在同一天完成。我在 sql 架构中创建了一个名为 TruncateTime 的函数,如下所示:

Create FUNCTION TruncateTime(@dateValue DateTime) RETURNS date
AS BEGIN
    RETURN CONVERT(date, @dateValue)
END

为了检查我的 c# 脚本中的日期,我写了:

p = dc.pointages.SingleOrDefault(x => 
    x.userid.Equals(user_id) && 
    EntityFunctions.TruncateTime(x.date_pointage)== today.Date );

抛出的解释是:

类型为"系统.不支持的异常"发生在 System.Data.Linq.dll但未在用户代码中处理

我尝试了很多方法,我现在很困惑。

将日期时间转换为日期或默认方法

在对数据库集执行 linq 查询时,不能使用自定义方法,但可以先将其放入列表,然后再进行比较。请注意,执行此操作时会获取所有记录,而不是在数据库中进行筛选。

p = dc.pointages
      .Where(x => x.userid.Equals(user_id))
      .ToList() // this will enable you to call custom methods in SingleOrDefault
      .SingleOrDefault(x => 
         EntityFunctions.TruncateTime(x.date_pointage)== today.Date );

使用 LinqPad,我为您创建了示例:

List<DateTime> dates = new List<DateTime>(){
        new DateTime(2015,1,1,0,0,1),
        new DateTime(2015,1,1,0,1,1),
        new DateTime(2015,1,2,0,2,2),
        new DateTime(2015,1,2,0,3,3),
        new DateTime(2015,1,3,0,4,4),
        new DateTime(2015,1,3,0,5,5),
        new DateTime(2015,1,9,8,7,6),
        new DateTime(2015,1,9,9,7,7),
        new DateTime(2015,1,9,10,8,8),
        new DateTime(2015,1,9,11,9,9),
        new DateTime(2015,1,9,12,10,10),
        new DateTime(2015,1,9,13,11,11)
        };
var qry = dates.Where(x=>x.ToString("yyyy/MM/dd")==new DateTime(2015,1,9).ToString("yyyy/MM/dd"));
qry.Dump();

结果:

2015-01-09 08:07:06 
2015-01-09 09:07:07 
2015-01-09 10:08:08 
2015-01-09 11:09:09 
2015-01-09 12:10:10 
2015-01-09 13:11:11 

注意:您需要将其更改为您的需要;)

您应该能够使用 DateTime 对象的内置日期比较,如下所示:

p = dc.pointages.SingleOrDefault(x => 
    x.userid.Equals(user_id) && 
    x.date_pointage.Date.Equals(DateTime.Today.Date);