C# LINQ中日期时间比较的性能
例如,我有一些数据源(可能是数据库),需要从中提取上个月的所有记录。我正在使用LINQ。有两种可能的方法来实现这一点: 第一:C# LINQ中日期时间比较的性能,c#,linq,performance,datetime,comparison,C#,Linq,Performance,Datetime,Comparison,例如,我有一些数据源(可能是数据库),需要从中提取上个月的所有记录。我正在使用LINQ。有两种可能的方法来实现这一点: 第一: var res = from rec in _records where rec.RequestDateTime.Date.Year == date.Year && rec.RequestDateTime.Date.Month == date.Month select rec; 第
var res = from rec in _records
where rec.RequestDateTime.Date.Year == date.Year &&
rec.RequestDateTime.Date.Month == date.Month
select rec;
第二(使用直接日期比较):
var year=date.year;
var月=日期月;
var monthStart=新日期时间(年、月、1);
var monthEnd=新的日期时间(年、月、日期时间.DaysInMonth(年、月));
var res=来自记录中的记录
其中rec.RequestDateTime.Date>=monthStart&&
rec.RequestDateTime.Date我会更进一步——在我看来,对于几乎所有的提供者(尤其是LINQ到对象),它的工作速度都会更快。当谈到索引数据时,数据库索引通常是排序的,因此根据范围进行选择非常快速和简单。=
不需要解释,=
等都很简单-这是一个数字比较。测试月/年需要计算月/年。这些数据不是以整数的形式显式存储的,也不是直接保存的。是的,计算起来并不太昂贵,但当考虑到整体日期时,它也不是免费的。你的分析告诉你了什么?@Rune FS,遗憾的是,分析没有解释为什么……更正它只回答了你问题的第一部分。
var year = date.Year;
var month = date.Month;
var monthStart = new DateTime(year, month, 1);
var monthEnd = new DateTime(year, month, DateTime.DaysInMonth(year, month));
var res = from rec in _records
where rec.RequestDateTime.Date >= monthStart &&
rec.RequestDateTime.Date <= monthEnd
select rec;