对没有分组值的记录进行分组
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)};
你可以试试
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。
此致,
丹尼尔.
请考虑以下记录:
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)};
你可以试试
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。
此致, 丹尼尔.