按周分组的C#LINQ绘图图数据

时间:2017-01-24 14:35:06

标签: c# linq

我正在尝试使用给定的日期范围(fromDatetoDate)并按7天的时间段对结果进行绘制。

我的问题是,如果在给定时间段内没有结果,我仍然需要为其绘制结果对象,以便我有一个完整的时间轴。

我的Entity有一个名为DateCreated的DateTime字段,这就是我需要分组的内容。

我已经在这里看了很多关于按周分组的例子,但是它有一个给定的日期范围,这使得它更难完成。

1 个答案:

答案 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;

        }