2017-01-24 8 views
0

私は指定された日付範囲(fromDatetoDate)をとり、7日間の期間をグラフにしています。C#LINQプロットグラフデータを週別にグループ化します

私の問題は、特定の期間に結果が表示されない場合、結果のオブジェクトをグラフ化する必要があるため、完全なタイムラインがあることです。

私のEntityには、DateCreatedというDateTimeフィールドがあり、これはグループ化する必要があります。

ここでは週単位でグループ化する例を数多く見てきましたが、これには特定の日付範囲があり、達成が難しくなっています。

+0

あなたがグループ、あなたのCalendar.GetWeekOfYearと週数によるデータ、およびは「fromDateから」を「toDateまでの反復では見逃さデータポイントを埋めることができます7日間のステップで –

+0

曜日や時間を繰り返して、そのエンティティがその日付に作成されたかどうかを確認するのはなぜですか? –

+0

必要な日付のシーケンスから開始し、実際のデータとグループに参加させることができます。 –

答えて

0

は、私は次の方法で問題を解決しました: -

public Dictionary<DateTime, int> GetDataWeekly(IQueryable<Entity> entities, DateTime from, DateTime to) 
     { 
      var graphData = new Dictionary<DateTime, int>(); 

      var weekValues = entities.GroupBy(o => new 
      { 
       Year = SqlFunctions.DatePart("yyyy", o.DateCreated), 
       Week = SqlFunctions.DatePart("ww", o.DateCreated) 
      }).ToDictionary(o=> o.Key, o=>o.Count()); 

      var currentWeekDateTime = from; 

      while (currentWeekDateTime < to) 
      { 
       var total = 0; 

       var currentWeekNumber = GetWeekOfYear(currentWeekDateTime); 

       var generatedKey = new 
       { 
        Year = (int?)currentWeekDateTime.Year, 
        Week = (int?)currentWeekNumber 
       }; 


       if (weekValues.ContainsKey(generatedKey)) 
       { 
        total = weekValues[generatedKey]; 
       } 

       graphData.Add(currentWeekDateTime, total); 

       currentWeekDateTime = currentWeekDateTime.AddDays(7); 
      } 

      return graphData; 

     } 
+1

DBから不必要なデータを大量にプールしないように、(Where、from、from)条件をWhereのクエリに追加する必要があります。 –

+0

お詫び申し上げます。ここでは、グループ化の前にフィルタリングが行われるコードラインがありません。 – Derek

+0

そして、あなたがループでやっていることは、実際にはシーケンスとの外部結合に残っていると言う必要があります。 –

関連する問題