C# 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; 第

例如,我有一些数据源(可能是数据库),需要从中提取上个月的所有记录。我正在使用LINQ。有两种可能的方法来实现这一点:

第一:

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;