【发布时间】:2016-03-09 23:51:58
【问题描述】:
我正在尝试使用日期填充 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().Date 不起作用。
编辑
我的主要目标是能够从集合中的列中提取所有日期时间值。查找 Min().Date 并根据 Min().Date 从 Min().Date 开始按周分组日期时间
这基本上是我想出的,遍历集合,将所有日期时间放入日期列表中,找到最小值并将它们分组以找到星期。我需要空值作为占位符,因为我最终要做的是将每个值输出回集合,所以我知道日期时间在哪一周,与 min.date 相关
【问题讨论】:
-
如果列表中没有日期,您希望发生什么?
firstDay应该是什么? -
叹气...伙计们,把 lamda in 放到
Min()调用...每个 LINQ 步骤都有与之相关的成本,不要只是假设它会自动解析为美丽的表达式树(这是一个矛盾的说法,顺便说一句 - 表达式树永远不会美丽)...... -
好吧,@code4life。就此而言,
if块的代码比需要的要多得多。DateList.Add(o as DateTime?);就足够了。 -
@recursive 我从代码中省略了 firstday 的默认值。
-
我基本上是在应用这个 groupby 并计数从我的数据源集合中获得的每一行,并将其作为附加列吐回。我不知道是否有更简单的方法来做到这一点。