C# 如何根据周数向列表中添加空对象
我从db获取的数据如下:C# 如何根据周数向列表中添加空对象,c#,linq,group-by,entity-framework-core,C#,Linq,Group By,Entity Framework Core,我从db获取的数据如下: DateTime jan1 = new DateTime(DateTime.Today.Year, 1, 1); //beware different cultures, see other answers DateTime startOfFirstWeek = jan1.AddDays(1 - (int)(jan1.DayOfWeek)); Dictionary<int, productsDemoObject> allWeeks = Enumerable
DateTime jan1 = new DateTime(DateTime.Today.Year, 1, 1);
//beware different cultures, see other answers
DateTime startOfFirstWeek = jan1.AddDays(1 - (int)(jan1.DayOfWeek));
Dictionary<int, productsDemoObject> allWeeks =
Enumerable
.Range(0, 54)
.Select(i => new {
weekStart = startOfFirstWeek.AddDays(i * 7)
})
.TakeWhile(x => x.weekStart.Year <= jan1.Year)
.Select(x => new {
x.weekStart,
weekFinish = x.weekStart.AddDays(4)
})
.SkipWhile(x => x.weekFinish < jan1.AddDays(1))
.Select((x, i) => new productsDemoObject
{
Week = i + 1,
Month = x.weekStart.Month,
Amount = 0
})
.ToDictionary(x => x.Week, x => x);
foreach(var week in yas
.GroupBy(x => CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(x.PaymentDate ?? DateTime.UtcNow, CalendarWeekRule.FirstDay, DayOfWeek.Monday)))
{
allWeeks[week.Key].Amount = week.Sum(x => x.Amount);
}
后来我把它们分组,这样看起来
Month 6
Week 2
Amount 228
等等
代码如下:
var yas = await _context.product
.AsNoTracking()
.Where(x => (x.PaymentDate != null && x.PaymentDate > DateTime.UtcNow.AddMonths(-4))).ToListAsync();
var grouped = yas.GroupBy(x => CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(x.PaymentDate ?? DateTime.UtcNow, CalendarWeekRule.FirstDay, DayOfWeek.Monday))
.Select(product => new productsDemoObject
{
Week = GetWeekNumberOfMonth(product.FirstOrDefault().PaymentDate.Value),
Amount = product.Sum(x => x.Amount),
Month = product.FirstOrDefault().PaymentDate.Value.Month
});
如您所见,第6个月只有第2周的数据。正如预期的那样,这是一个团队和工作,但现在我想知道如何添加数量为0的空对象,以弥补缺少的周数
例如,如果只有第2周,让我们为第1、3和4周添加金额为0的数据
在第8个月的例子中,因为有第2周和第3周,我应该将第1周和第4周的金额加上0
我怎样才能做到这一点
谢谢各位
干杯如果你想在一年中每周都有一个条目,你需要以某种方式创建这些条目。你们可以看一下答案,然后根据你们的要求修改一下 大概是这样的:
DateTime jan1 = new DateTime(DateTime.Today.Year, 1, 1);
//beware different cultures, see other answers
DateTime startOfFirstWeek = jan1.AddDays(1 - (int)(jan1.DayOfWeek));
Dictionary<int, productsDemoObject> allWeeks =
Enumerable
.Range(0, 54)
.Select(i => new {
weekStart = startOfFirstWeek.AddDays(i * 7)
})
.TakeWhile(x => x.weekStart.Year <= jan1.Year)
.Select(x => new {
x.weekStart,
weekFinish = x.weekStart.AddDays(4)
})
.SkipWhile(x => x.weekFinish < jan1.AddDays(1))
.Select((x, i) => new productsDemoObject
{
Week = i + 1,
Month = x.weekStart.Month,
Amount = 0
})
.ToDictionary(x => x.Week, x => x);
foreach(var week in yas
.GroupBy(x => CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(x.PaymentDate ?? DateTime.UtcNow, CalendarWeekRule.FirstDay, DayOfWeek.Monday)))
{
allWeeks[week.Key].Amount = week.Sum(x => x.Amount);
}
DateTime jan1=新的DateTime(DateTime.Today.Year,1,1);
//注意不同的文化,看看其他的答案
DateTime startOfFirstWeek=jan1.AddDays(1-(int)(jan1.DayOfWeek));
每周查字典=
可枚举
.范围(0,54)
.选择(i=>new{
weekStart=StartFirstWeek.AddDays(i*7)
})
.TakeWhile(x=>x.weekStart.Year new{
x、 weekStart,
weekFinish=x.weekStart.AddDays(4)
})
.SkipWhile(x=>x.weekFinish新产品主题
{
周=i+1,
月份=x.weekStart.Month,
金额=0
})
.ToDictionary(x=>x.周,x=>x);
foreach(var)在yas中的一周
.GroupBy(x=>CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(x.PaymentDate??DateTime.UtcNow,CalendarWeekRule.FirstDay,DayOfWeek.Monday)))
{
allWeeks[week.Key].Amount=week.Sum(x=>x.Amount);
}
旧的电话中继线问题。贝尔电话科学家致力于确定一家公司用来确定所需中继线数量的最大电话呼叫数。所以解决方案是创建一个间隔30秒的表格,然后填写表格。您需要对此进行修改,以确保每个期间都有一个表条目。因此,您需要创建一个表,其中包含6个月期间每周的一行。然后用数据填写表格。没有添加数据的行是没有条目的周。这应该有助于创建不同日期的列表…对于这些日期…您需要根据周值进行分组…并将其与数据集合并以获得零…因此您总是希望yas
包含52或53个条目,一年中每周一个?@mm8 Yes,我总是希望1个月内有4个条目,即使数据库值仅存在1周和3周,例如,我希望2的值为空。四,。周:)每周一获取一次:DateTime startDate=DateTime.Parse(“1/7/19”)//一年中的第一个星期一DateTime endDate=DateTime.Parse(“6/7/19”);DateTime[]mondays=Enumerable.Range(0,((endDate-startDate).Days/7)+1)。选择((x,i)=>startDate.Date.AddDays(7*i)).ToArray();