public class Product {
public List<DateTime> FailureDates { get; set; }
}
我有一个List<Product>
,然后我尝试根据List<DateTime>
进行分组,以便在图表中使用。分组应该基于DateTime对象的Year。所以我希望最终结果看起来像:
按年度计算的总失败率
2012:1,
2011:5,
2010:3
......等等。
我最初在DateTime对象成为包含以下代码的列表之前就已经开始工作了:
return Json.Encode(Products.Where(s => s.FailureDate != DateTime.MinValue).GroupBy(s => s.FailureDate.Year).Select(s => new { Year = s.Key.ToString(), FailureCount = s.Count() }).ToArray());
但是,现在DateTime是一个List,所以我不确定如何对它进行分组。我认为合并需要为此工作,所以也许LINQ代码最终会变得太乱,我会更好地使用非LINQ解决方案(例如迭代我的产品然后迭代我的日期和建立一个字典来跟踪计数。)
答案 0 :(得分:8)
这对你有用。
var query = from p in Products
from f in p.FailureDates
where f != DateTime.MinValue
group f by f.Year into g
select new
{
Year = g.Key.ToString(),
FailureCount = g.Count(),
}
或者要使用您的示例,只需在此类产品上添加SelectMany
return Json.Encode(Products.SelectMany(p => p.FailureDates)
.Where(s => s != DateTime.MinValue)
.GroupBy(s => s.Year)
.Select(s => new { Year = s.Key.ToString(), FailureCount = s.Count() }).ToArray());