c# - 没有时间的日期从和到过滤 c# mvc

标签 c# datetime

我在一个 mvc 应用程序中有 2 个输入: date_from 和 date_to(这只是 View 中的日期,不是日期时间)

当我调用一个服务来获取由我调用的那些值过滤的结果时

Result result = client.GetResults(from = date_from, to = date_to);

GetResults 中的逻辑像这样在 EF5 上执行 linq:

context.Results.Where(r=> r.date >= date_from && r.date <= date_to);

因为 View 只有 DateTime 的日期部分,如果我通过 来自 : 2013-12-01 至 : 2013-12-01

我得到的唯一结果是 0:0:0 的结果

我想做的是用 to 作为日期的结束调用服务。

  • 注意:我不想更改服务逻辑,因为时间在其他地方使用。
  • 注意 2:我不想发送 date_to.AddDays(1),因为它会在 0:0:0 时显示另一个日期的数据。

什么是好的解决方案?我想出了 date_to.AddDays(1).AddMilliseconds(-1) 但我认为这不是一个好方法。

谢谢。

最佳答案

最简单的方法是添加一天但将上限更改为独占:

var lowerBoundInclusive = date_from;
var upperBoundExclusive = date_to.AddDays(1);
context.Results.Where(r=> r.date >= lowerBoundInclusive && 
                          r.date < upperBoundExclusive);

像这样的半开区间很好,因为它们自然邻接 - 您可以使用一个区间的独占上限作为下一个区间的包含下限,等等 - 每个值都将恰好落入一个区间。这也意味着每个边界都是 nice round 值,这很容易阅读。

编辑:好的,根据评论,我们似乎有所进展 - 问题是 .NET 在处理“仅日期”和“日期和时间”时使用 DateTime ”。通常,当用日期表示间隔时,您使用包含间隔(“我在周一到周五休假”),而对于日期和时间,您使用不包含上限(“我的第一次 session 是 3:00-4:00,我的第二次 session 是 4:00-5:00。”- 在 4:00,您的第一次 session 结束,第二次 session 开始。)

我建议写两个方法,其中一个可以调用另一个:

// This is *inclusive* of both bounds
public XYZ GetResultsByDate(DateTime fromDate, DateTime toDate)
{
    return GetResultsByDateAndTime(fromDate.Date, toDate.Date.AddDays(1));
}

// This is *exclusive* of the upper bound
public XYZ GetResultsByDateAndTime(DateTime from, DateTime to)
{
    var results = context.Results.Where(r=> r.date >= from && r.date < to);
    ...
}

关于c# - 没有时间的日期从和到过滤 c# mvc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17955432/

相关文章:

c# - 中央标准时间休息一小时

c# - ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

c# - Xamarin/Android 和可怕的蓝牙 LE 错误 133 (GATT_ERROR)

Python Pandas 数据帧 : convert local UTM time to GMT using longitude

java - 1900 年之前的 JodaTime 和 Calendar 之间的区别

sql-server - 使用 Year 和 autoincrement 创建列

php - 如果没有奇怪的错误,不能一次修改一次

C# OpenXml 获取 DOCX WordStyle 属性简化代码

c# - 有没有办法在 C#/.NET 2.0 中将 C 格式字符串转换为 C# 格式字符串?

c# - 使用 Visual State Manager 重新模板化内置 WPF 控件