[英]DateTime comparison with formatting in LINQ
我正在尝试编写一个简单的LINQ查询,在其中比较DateTime以获取结果。 我的要求是DateTime必须只比较到毫秒,因此我必须应用formatter。 查询如下
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
的值以避免每次比较都重新计算它
据我了解,您只想比较包括整个毫秒(无小数,无滴答)。 因此,您可以仅使用整个ms来创建新的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
然后再次返回要快得多。
我的要求是DateTime必须只比较到毫秒, 因此我必须应用formatter。
不,您不必应用格式化程序。 只需创建一个带有空毫秒部分的新日期即可。 代替
DateTime.Compare(date1, date2)
采用
DateTime.Compare(DropMilliseconds(date1), DropMilliseconds(date2))
或者,因为您只对相等感兴趣(而不对DateTime.Compare将为您提供的其他信息感兴趣):
DropMilliseconds(date1) == DropMilliseconds(date2)
DropMilliseconds定义如下(或任何其他实现 ):
private static DateTime DropMilliseconds(DateTime dtm)
{
return new DateTime(dtm.Year, dtm.Month, dtm.Day,
dtm.Hour, dtm.Minute, dtm.Second,
dtm.Kind);
}
如果您担心方法调用的开销,可以告诉编译器积极地内联它 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.