允许Null进入List <datetime>但在Min.Date()

时间:2016-03-09 23:51:58

标签: c# linq list datetime

我试图填充List&lt;&gt;使用日期但允许Null,因为数据源可以包含日期的空值。这是我试过的代码:

List<Nullable<DateTime>> DateList = new List<Nullable<DateTime>>();


    for (int ii = 0; ii < queryresults.Count; ii++)
    {

        object o = queryresults[ii].Fields[SplitComboBox.SelectedItem.ToString()].Value;

        if (o is DateTime)
        {
            DateList.Add((DateTime)o);
        }
        else
        {
            DateList.Add(null);
        }
    }
}        

var firstDay = DateList.Min().Date;
var results =
    DateList
      .GroupBy(x => x.Date.Subtract(firstDay).Days / 7 + 1)
      .SelectMany(gx => gx, (gx, x) => new {Week = gx.Key,DateTime = x,Count = gx.Count(),});

但现在.Min()。日期不起作用。

修改

我的主要目标是能够从集合中的列中提取所有日期时间值。找到Min()。日期并根据Min()。从Min()开始按周计算日期时间。日期

这是我基本上想出的,遍历集合,将所有日期时间放入日期列表,找到min和groupthem以找到一周。我需要将null值作为占位符,因为我最终会将每个值输出回集合,因此我知道datetime所处的周,与min.date相关

2 个答案:

答案 0 :(得分:2)

这应该可以解决问题:

var firstDay = DateList.Where(d => d != null).Cast<DateTime>().Min().Date;

过滤掉空值,将剩余值转换为常规DateTime

编辑:您也可以在groupby之前执行此操作:

var filtered = DateList.Where(d => d != null).Cast<DateTime>().ToList();
var firstDay = filtered.Min().Date;
var results = filtered.GroupBy(x => x.Date.Subtract(firstDay).Days / 7 + 1)
                      ...

但我想知道你为什么首先需要列表中的空值?只需创建一个List<DateTime>并添加非空值。

答案 1 :(得分:1)

通过查看HasValue属性来过滤集合/列表中的空值。

DateList.Where(d=>d.HasValue).Min();

工作Demo