C# Linq分组周数,包括0个记录周

C# Linq分组周数,包括0个记录周,c#,linq,reporting-services,C#,Linq,Reporting Services,我正在尝试获取SSRS折线图的数据集。我试图显示过去六个月一年中每周记录的数量。为了使折线图准确,我必须显示没有记录的周数 我想为折线图提供如下数据: Year Week Count 2014 52 13 2015 1 0 2015 2 16 以下linq查询获得了我需要的所有内容,减去没有记录的周数: list = (from t in context.Cats.Where( t => t.Name == "F

我正在尝试获取SSRS折线图的数据集。我试图显示过去六个月一年中每周记录的数量。为了使折线图准确,我必须显示没有记录的周数

我想为折线图提供如下数据:

Year  Week  Count
2014  52    13
2015  1     0
2015  2     16
以下linq查询获得了我需要的所有内容,减去没有记录的周数:

 list = (from t in context.Cats.Where(
                     t => t.Name == "Fluffy" &&
                  (t.Recorded >= start && t.Recorded <= end)
                      ).AsEnumerable()
                        group t by new { Year = t.Recorded.Year, WeekNumber = (t.Recorded - new DateTime(t.Recorded.Year, 1, 1)).Days / 7 } into ut
                        select new TrendRecord
                        {
                            Year = ut.Key.Year,
                            Week = ut.Key.WeekNumber,
                            Count = ut.Count()
                        }).OrderBy(t => t.Year).ThenBy(t => t.Week).ToList<TrendRecord>(); 
list=(来自context.Cats.Where中的t(
t=>t.Name==“蓬松”&&
(t.Recorded>=开始&t.Recorded t.Year)。然后是(t=>t.Week)。ToList();
我看了很多问题,但都不太适合我的困境

我倾向于创建一个在开始日期和结束日期之间包含所有可能的周数的列表,然后以某种方式将我的数据加入其中,以便显示记录为0的周


这是解决这个问题的一种可以接受的方法吗(如果可以的话,请告诉我怎么做)?有没有一种方法可以在一个查询中完成这项工作,而不需要单独的列表加入?

您需要一个周列表,并使用Linq进行某种左外连接

像这样的东西应该可以帮助你开始

    var weeks = new[]
    {
        new {Year = 2014, Week = 52},
        new {Year = 2015, Week = 1},
        new {Year = 2015, Week = 2},
    };

    var listWithEmptyWeeksIncluded = 
        from w in weeks
        from l in list.Where(x => x.Year == w.Year && x.Week == w.Week).DefaultIfEmpty()
        select new TrendRecord
                    {
                        Year = w.Year,
                        Week = w.Week,
                        Count = l == null ? 0 : l.Count
                    };
当然,周数应该根据变量
start
end


此外,您应该使用标准周计算,例如ISO周标准,以便正确处理跨两年的周。

这不是一个解决方案,而是一个对周计算很重要的问题。您确定要从1月1日开始计算一年中的周数,而不是从周数开始计算吗一天?这很不寻常。通常日历周是以一个特殊的工作日开始计算的,结果是一周与新年重叠。我知道我现在的方式会导致我的周数有点偏离。不过这对下一天来说是一个挑战。哈哈。这个折线图实际上是一个闪光点,所以我不会用户不关心实际的周数(因为他们看不到任何轴)。至少目前来说,重要的是,迷你图包含过去六个月的数据,并且表示零记录周。因为截止日期:-(创建周列表和外部连接(通过LINQ到对象)是一种方法。