我正在尝试编写一个简单的 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
是一个巨大的集合,上面的查询导致性能下降。
如果有人能建议我更好的方法来达到预期的结果,那将有很大的帮助。
最佳答案
缓存
currentTime
的值以避免每次比较都重新计算它据我了解,您只想比较包括整个 毫秒(没有分数,没有刻度)。因此,您可以创建新的
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/