如果date为null或不使用Linq查询,则过滤列表

时间:2016-07-05 17:44:54

标签: c# linq

我有一个对象列表,如下所示,其中日期可以为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();

如果Date为null,我不需要那些结果,但我正在努力如何在HasValue的错误条件下继续进行。

3 个答案:

答案 0 :(得分:3)

如果“Date”是DateTime ?,您可以像这样更改查询:

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

因此,您的空日期将被过滤,然后您可以安全地比较日期值。

答案 1 :(得分:2)

Where(过滤器​​)和OrderBy(排序)的组合应该有效:

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

答案 2 :(得分:1)

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

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

myList.Where(t => t.Date >= comparingDays).ToList()

因为null不比任何日期值更大(或更小)。