【问题标题】:Match dates in Linq, C#, SQL在 Linq、C#、SQL 中匹配日期
【发布时间】:2014-09-16 16:55:02
【问题描述】:

我正在使用存储库模式来查询 SQL,以根据通过 Web api 传入的日期获取记录。例如,查询字符串为 date=2014-09-16。当我的存储库收到此日期时,时间会自动设置为 12:00:00,因为没有通过。我只对像这样匹配数据库中的日期感兴趣:

public IQueryable<Instance> GetInstances(DateTime date) {
        return DBContext.Instances.Where(x => x.StartDateTime == date).OrderBy(x => x.StartDateTime).AsQueryable();
    }

问题是找不到匹配项,因为数据库中的记录由于时间部分的原因不是完全匹配,即使该日期存在记录。在上述示例中获得匹配的最佳方法是什么?

【问题讨论】:

  • 那么你为什么不能使用专门设计的方法来做你想做的事呢?
  • 对不起,新手。我尝试添加 System.Data.Entity 然后调用 DbFunctions 但我收到一个错误,它在当前上下文中不存在。
  • 您使用的是什么类型的查询提供程序?您使用的是 EF、linq to SQL 还是其他?您需要使用特定于您正在使用的查询提供程序的函数。
  • 提供您正在使用的实际查询以及您收到的确切错误消息。而不是说你不能使用它,你应该解释你在使用它时遇到了什么问题,因为你没有理由禁止人们使用它,而是你需要弄清楚如何正确使用它.

标签: c# sql linq datetime


【解决方案1】:

这里是所有默认的 .NET methods EF supports。仅支持这些。如果你想要别的东西,你必须使用这些日期函数:Entity Framework sqlFunctions,或者将你的代码放在存储过程或表函数中(可以由上下文调用)。

【讨论】:

  • 他在问题中明确表示不想使用您所指的相应功能。
  • 他说他不想使用 DbFunctions.TruncateTime。我提出了 SqlFunctions,很可能是 DateDiff,所以从技术上讲,这与最初提到的限制不同。我还更新了问题以包含更多细节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多