2
public class Product {
    public List<DateTime> FailureDates { get; set; }
}

があり、グラフで使用するために にList<Product>基づいてグループ化しようとしています。List<DateTime>グループ化は、DateTime オブジェクトの年に基づくと想定されています。したがって、最終結果は次のようになります。

年ごとの故障総数

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 がリストになったので、グループ化する方法がわかりません。これを機能させるにはマージが必要だと考えているので、おそらく LINQ コードが乱雑になりすぎて、LINQ 以外のソリューションを使用する方がよいでしょう (たとえば、製品を反復処理してから日付を反復処理し、カウントを追跡するために辞書を作成します)。

4

1 に答える 1

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());
于 2012-04-23T16:00:43.327 に答える