我试图填充List<>使用日期但允许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相关
答案 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)