.Where(Date.AddHours)过滤器似乎不起作用

时间:2018-03-27 11:04:16

标签: c#

我正在排序从昨天下午1:00到现在创建的文件列表。我尝试使用以下代码:消息框显示我尝试引用的正确时间,但过滤器似乎无法正常工作。如果我删除" AddHours(13)"它确实过滤了。

MessageBox.Show(DateTime.Now.Date.AddDays(-1).AddHours(13).ToString());
string[] files = Directory.GetFiles(FBD.SelectedPath, "*.xls")
    .Where(file => new FileInfo(file).CreationTime.Date >= (DateTime.Now.Date.AddDays(-1).AddHours(13)) && file.Contains("AA"))
    .OrderBy(file => new FileInfo(file).CreationTime.Date)
    .ToArray(); 

我错过了什么?

1 个答案:

答案 0 :(得分:3)

DateTime.Now.Date.AddDays(-1).AddHours(13)将在下午1点返回...但是您正在检查new FileInfo(file).CreationTime.Date,它总是在午夜...对于昨天创建的文件,它将是昨天午夜。

所以是的,你要过滤掉那个文件。如果您从.Date移除了new FileInfo(file).CreationTime部分,那可能就是您需要做的全部内容。

作为旁注,我会使用DateTime.Today代替DateTime.Now.Date,我也会尝试避免多次评估。我也会使用DirectoryInfo并坚持FileInfo条目,因为你已经创建了这两个条目。我会将您的查询重写为:

var cutoff = DateTime.Today.AddDays(-1).AddHours(13);
FileInfo[] files = new DirectoryInfo(FBD.SelectedPath).GetFiles("*.xls")
    .Where(file => file.CreationTime >= cutoff)
    .OrderBy(file => file.CreationTime)
    .ToArray();