【问题标题】:Comparing times with LINQ to sql dynamically动态比较与 LINQ to sql 的时间
【发布时间】:2015-07-01 17:05:11
【问题描述】:

如果我在标题中描述正确,我想仅按小时和分钟值按日期时间值进行查询。

事实上,我想按工作时间或不过滤当天的行。

我尝试在纯日期值上添加小时

elementsOturums.Where(i => i.EntryTime.Value.AddDays(1) < i.EntryTime.Value.Date.AddDays(1).AddHours(8).AddMinutes(30)
                                                  && i.EntryTime.Value > i.EntryTime.Value.Date.AddHours(17).AddMinutes(15));

但它给出了类似的错误;

日期函数 dateadd 不支持数据类型 date 的 datepart 毫秒。

然后我试图通过使用一种方法来克服,但它又给出了一个错误,例如;

方法“{0}”不支持 SQL 转换。

那么我该如何解决这个问题呢?

【问题讨论】:

  • i.EntryTime.Value > i.EntryTime.Value.Date.AddHours(17).AddMinutes(15) 这个条件不应该成立。
  • 您不能调用数据提供者不知道如何将其转换为 SQL 的方法。也许您可以像这样尝试 .Where(i => i.EntryTime.Value.Hour
  • A similar question 之前被问过,那里给出的答案对这个问题也很有用。

标签: c# linq


【解决方案1】:

您应该按 TimeSpan 进行比较:

var wdStart = TimeSpan.FromHours(8.5);
var wdEnd = TimeSpan.FromHours(17.25);

var result = elementsOturums.Where(t => t.EntryTime.HasValue)
    .Where(t => t.EntryTime.Value.TimeOfDay >= wdStart
             && t.EntryTime.Value.TimeOfDay <= wdEnd);

这会给你工作时间的物品。

【讨论】:

    猜你喜欢
    • 2014-02-12
    • 2012-12-17
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多