c# - DateTime 与 LINQ 中格式的比较

标签 c# linq datetime

我正在尝试编写一个简单的 LINQ 查询,其中比较 DateTime 以获得结果。我的要求是 DateTime 必须只比较到毫秒,因此我必须应用格式化程序。查询如下

var availableValues = from value in AvailableValues
                      where DateTime.Compare(DateTime.ParseExact(value.Time.ToString("dd/MM/yyyy HH:mm:ss.fff"), "dd/MM/yyyy HH:mm:ss.fff", System.Globalization.CultureInfo.CurrentCulture),
                      DateTime.ParseExact(currentTime.ToString("dd/MM/yyyy HH:mm:ss.fff"), "dd/MM/yyyy HH:mm:ss.fff", System.Globalization.CultureInfo.CurrentCulture)) == 0
                      select value;

AvailableValues 是一个巨大的集合,上面的查询导致性能下降。

如果有人能建议我更好的方法来达到预期的结果,那将有很大的帮助。

最佳答案

  1. 缓存 currentTime 的值以避免每次比较都重新计算它

  2. 据我了解,您只想比较包括整个 毫秒(没有分数,没有刻度)。因此,您可以创建新的 DateTime 值,仅包含整毫秒(如果您的查询提供程序允许):

    DateTime current = new DateTime(
        currentTime.Year, currentTime.Month, currentTime.Day, 
        currenTime.Hour, currentTime.Minute, currentTime.Second, currentTime.Kind).
        AddMilliseconds(currentTime.Millisecond);
    
    var availableValues = from value in AvailableValues
        where currentTime == new DateTime(
            value.Time.Year, value.Time.Month, value.Time.Day, 
            value.Time.Hour, value.Time.Minute, value.Time.Second, value.Time.Kind).
            AddMilliseconds(value.Time.Millisecond)
        select value;
    

这比将您的 DateTime 转换为 string 然后再转换回来要快得多。

关于c# - DateTime 与 LINQ 中格式的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36197740/

相关文章:

c# - 在客户端将json字符串转换为json?

c# - 如何让一个类的多个实例(在不同的线程中)监听同一个事件?

c# - 方法无法转换为存储表达式语法错误

python - Pandas groupby 并获取两列

javascript - 如何通过迭代计算时间

c# - 将 AM/PM 时间转换为 24 小时格式?

c# - 将 excel 数据复制粘贴到富文本框中 + 删除网格线

c# - 无法从另一个类访问列表

c# - 了解 linq 语法

c# - 获取 linq 列表中对象的百分比并将其映射到 JSON 的最佳方法是什么?