C# 我如何在LINQ中插入占位符,以便我的组正好有24个点

C# 我如何在LINQ中插入占位符,以便我的组正好有24个点,c#,arrays,linq,C#,Arrays,Linq,我正在将一天中的24小时绘制成一张图表,但某些时间(如上午)没有点。当该小时没有值时,如何将linq更改为插入“Times=1” 所以而不是 4,6,8,5,7,9 是的 1,1,1,1,4,1,6,8,5,7,9。。。(始终24分) 您可以使用Enumerable.Range获取24小时序列,无需使用GroupBy: var hourlyLeads = Enumerable.Range(0, 24) .Select(h => new { Hour =

我正在将一天中的24小时绘制成一张图表,但某些时间(如上午)没有点。当该小时没有值时,如何将linq更改为插入“Times=1”

所以而不是

4,6,8,5,7,9

是的

1,1,1,1,4,1,6,8,5,7,9。。。(始终24分)


您可以使用
Enumerable.Range
获取24小时序列,无需使用
GroupBy

var hourlyLeads = Enumerable.Range(0, 24)
    .Select(h => new 
    { 
        Hour = h, 
        Count = newLeads.Count(nl => nl.CreateDate.Hour == h) 
    })
    .Select(x => new 
    { 
        Number = x.Hour, 
        Times = x.Count == 0 ? 1 : x.Count
    })
    .ToList();

更新


如何将“当前小时”也设置为“1”?我不想 显示当前正在进行的小时数。我可以试着把它从列表中删除 在linq声明之后收集,但不知道这是否容易 在当前linq语句中执行的操作

不太清楚,但如果要排除当前小时:

var hourlyLeads = Enumerable.Range(0, 24)
    .Where(h => h != DateTime.Now.Hour)
    .Select(h => new ........
如果只想将当前小时设置为1:

var hourlyLeads = Enumerable.Range(0, 24)
    .Select(h => new 
    { 
        Hour = h, 
        Count = h == DateTime.Now.Hour ? 1 : newLeads.Count(nl => nl.CreateDate.Hour == h) 
    })
    .Select(x => new .....

您可以使用
Enumerable.Range
获取24小时序列,无需使用
GroupBy

var hourlyLeads = Enumerable.Range(0, 24)
    .Select(h => new 
    { 
        Hour = h, 
        Count = newLeads.Count(nl => nl.CreateDate.Hour == h) 
    })
    .Select(x => new 
    { 
        Number = x.Hour, 
        Times = x.Count == 0 ? 1 : x.Count
    })
    .ToList();

更新


如何将“当前小时”也设置为“1”?我不想 显示当前正在进行的小时数。我可以试着把它从列表中删除 在linq声明之后收集,但不知道这是否容易 在当前linq语句中执行的操作

不太清楚,但如果要排除当前小时:

var hourlyLeads = Enumerable.Range(0, 24)
    .Where(h => h != DateTime.Now.Hour)
    .Select(h => new ........
如果只想将当前小时设置为1:

var hourlyLeads = Enumerable.Range(0, 24)
    .Select(h => new 
    { 
        Hour = h, 
        Count = h == DateTime.Now.Hour ? 1 : newLeads.Count(nl => nl.CreateDate.Hour == h) 
    })
    .Select(x => new .....

可枚举。范围作为数字源是一个很好的主意。您还可以添加GroupJoin以简化聚合:

var hourlyLeads =
  from hour in Enumerable.Range(0, 24)
  group lead in newLeads on hour equals lead.CreateDate.Hour into g
  let count = g.Count()
  select new
  {
    Number = g.Key.ToString(),
    Times = count == 0 ? 1 : count
  };

可枚举。范围作为数字源是一个很好的主意。您还可以添加GroupJoin以简化聚合:

var hourlyLeads =
  from hour in Enumerable.Range(0, 24)
  group lead in newLeads on hour equals lead.CreateDate.Hour into g
  let count = g.Count()
  select new
  {
    Number = g.Key.ToString(),
    Times = count == 0 ? 1 : count
  };

如何将“当前小时”也设置为“1”?我不想显示当前正在进行的小时数。我可以尝试在linq语句之后将其从集合中删除,但我想知道在当前的linq中是否很容易做到这一点statement@punkouter:什么是当前时间?@punkout:您不能修改它,因为
DateTime
是一个结构。但你为什么想要它?如果你有一个
DateTime
并且你想改变它的
Hour
属性,你必须创建一个新的
DateTime
。你到底想要什么?从可能的小时数中删除当前小时数,或将其
时间设置为0?oops。。我的意思是将其时间设置为“1”,以便条目以“空白”的形式存在。。所以它仍然包含24个条目。@punkouter:是的,我已经注意到了,并编辑了我的答案。我如何将“当前小时”设置为“1”?我不想显示当前正在进行的小时数。我可以尝试在linq语句之后将其从集合中删除,但我想知道在当前的linq中是否很容易做到这一点statement@punkouter:什么是当前时间?@punkout:您不能修改它,因为
DateTime
是一个结构。但你为什么想要它?如果你有一个
DateTime
并且你想改变它的
Hour
属性,你必须创建一个新的
DateTime
。你到底想要什么?从可能的小时数中删除当前小时数,或将其
时间设置为0?oops。。我的意思是将其时间设置为“1”,以便条目以“空白”的形式存在。。所以它仍然包含24个条目。@punkouter:是的,我已经注意到了,并编辑了我的答案。