C# 我如何在LINQ中插入占位符,以便我的组正好有24个点
我正在将一天中的24小时绘制成一张图表,但某些时间(如上午)没有点。当该小时没有值时,如何将linq更改为插入“Times=1” 所以而不是 4,6,8,5,7,9 是的 1,1,1,1,4,1,6,8,5,7,9。。。(始终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 =
您可以使用
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:是的,我已经注意到了,并编辑了我的答案。