过滤列表,如果日期为空或不使用Linq查询

本文关键字:Linq 查询 列表 如果 日期 过滤 | 更新日期: 2023-09-27 17:54:55

我有一个如下所示的对象列表,其中date可以为null,

List<SomeObjects> myList:
myList[0] = id:1, Date:3/3/2016
myList[1] = id:2, Date:NULL
myList[2] = id:3, Date:3/3/2016
myList[3] = id:4, Date:NULL

对于一个条件,我必须按日期排序这个列表,如下所示:

var comparingDays = DateTime.Today; 
var resultsFrom = "past 7 days";
comparingDays.AddDays(-7);                      
myList.Where(t =>t.Date.HasValue ? Convert.ToDateTime(t.Date) >= comparingDays : ).ToList();

如果日期为空,我不需要这些结果,但我正在努力如何在这里的HasValue的错误条件下进行。

过滤列表,如果日期为空或不使用Linq查询

如果"Date"是一个DateTime?,你可以这样修改你的查询:

myList
  .Where(t =>t.Date.HasValue && t.Date.Value >= comparingDays).ToList()

所以你的空日期将被过滤,然后你可以安全地比较日期值

Where(过滤器)和OrderBy(排序)的组合应该工作:

List<SomeObjects> results = myList.Where(t => t.Date.HasValue && t.Date >= comparingDays)
                                   .OrderBy(t => t.Date).ToList();

当t.Date是一个DateTime (Convert会对此产生疑问)时,您可以简单地使用

// myList
// .Where(t =>t.Date.HasValue ? Convert.ToDateTime(t.Date) >= comparingDays :)
// .ToList();
myList.Where(t => t.Date >= comparingDays).ToList()

因为null不大于(或小于)任何Date值