对没有分组值的记录进行分组

Grouping records that haven't groups values

请考虑以下记录:

Id        Week         Value
-----------------------------
1          1           1000
2          1           1200
3          2           800
4          3           1800
5          3           1100
6          3           1000

我想对 4 周的记录进行分组,但我们有一周 4.For 没有记录 示例:

Week         Count
---------------------
1              2
2              1
3              3
4              0

我如何使用 linq 做到这一点?

谢谢

首先您需要一组周,然后这个查询可能会有所帮助

    var weeks = new List<int>{1,2,3,4}

    var q = from w in weeks
        join rw in (
            from r in table
            group r by r.Week into g
            select new {week = g.Key, count = g.Count()}) on w  equals rw.week into p
        from x2 in p.DefaultIfEmpty()
        select new {w, count = (x2 != null ? x2.count : 0)};

online result in .net fiddle

你可以试试

    var result = Enumerable.Range(1, 4)
            .GroupJoin(table,
                week => week,
                record => record.Week,
                (week, records) => new { Week = week, Count = records.Count() });

正如 jessehouwing 所建议的,Enumerable.Range 将 return 可能的周数用作联接内的左外键。

GroupJoin 然后将接受作为参数

  • A lambda/delegate/method return 是左外键
  • 从您的 table 中提取正确密钥的 lambda/delegate/method。
  • 构建结果项的 lambda/delegate/method。

此致, 丹尼尔.