将缺少的枚举添加到列表 C#
Adding missing Enumerations into the list C#
我写了下面的代码,基本上按天对我的销售额进行分组,然后我在图表上向用户展示它们,如下所示:
var DailyGraph = userStores.ToList().GroupBy(x => x.TransactionDate.Value.DayOfWeek).Select(pr => new { Day = pr.Key.ToString(), Sales = pr.Sum(x => x.QuantitySoldTransaction) });
var dayIndex = new List<string> { "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" };
ViewBag.DailyGraph = DailyGraph.OrderBy(e => dayIndex.IndexOf(e.Day.ToUpper())).ToList();
好吧,这里发生了什么,在第一行中,我将所有可用的销售额按星期几参数(即 Enumeration)分组...然后我创建了一个字符串列表,其中包含确切的日期名称,例如 Enumeration,我比较他们这样我就可以随着时间的推移(从周一到周日)准确地订购它们...
我现在的问题是,如果用户在特定日期没有销售...假设周一和周四他没有销售...我现在如何将这些缺失的日子添加到我的列表中?由于我正在使用枚举,所以我对如何做到这一点感到有点困惑...
因此当前输出为:
Tuesday 5 sales
Wednesday 9 sales
Friday 4 sales
Saturday 13 sales
Sunday 5 sales
所需的输出是:
Monday 0 sales // Add missing day enumeration and assign 0 value
Tuesday 5 sales
Wednesday 9 sales
Thursday 0 sales // Add missing day enumeration and assign 0 value
Friday 4 sales
Saturday 13 sales
Sunday 5 sales
有人可以帮我吗?
丹,是这样的吗?
for (int i = 0; i < DailyGraph.Count(); i++)
{
if (!dayIndex.Contains(DailyGraph[i].Day.ToUpper()))
{
DailyGraph.Add(new HourlyGraph { Day = dayIndex.ElementAt(i), Sales = 0 });
}
}
您可以在末尾添加缺少的日期,例如:
DailyGraph.AddRange(
dayIndex.Except(DailyGraph.Select(t => t.Day)).Select(r => new { Day = r, Sales = 0 }));
首先,我不会使用字符串作为您的密钥,因为如果有人不使用英语,这可能不起作用。
你可以这样做:
var dayIndex = new List<DayOfWeek> { DayOfWeek.Monday, DayOfWeek.Tuesday, /* etc */ };
var DailySales = dayIndex.Select(d => new { Day = d, Sales =
userStores.Where(x => x.TransactionDate.Value.DayOfWeek == d)
.Sum(u => u.QuantitySoldTransaction) }).ToList();
获取一周中所有可用的日子,并与您计算的每日图表进行左外连接:
var DailyGraph = userStores.ToList().GroupBy(x => x.TransactionDate.Value.DayOfWeek).Select(pr => new { Day = pr.Key, Sales = pr.Sum(x => x.QuantitySoldTransaction) });
from day in Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>()
from graph in DailyGraph.Where(g => g.Day == day).DefaultIfEmpty()
select new
{
Day = day.ToString(),
Sales = graph == null ? 0 : graph.Sales
}
您可以使用 .ToLookup()
子句,并注意假设您的视图模型是
,您的日期名称列表并不是真正必要的
public class HourlyGraph
{
public DayOfWeek Day { get; set; }
public int Sales { get; set; }
}
查询是
var lookup = userStores.ToLookup(x => (int)x.TransactionDate.DayOfWeek);
ViewBag.DailyGraph = from day in Enumerable.Range(0, 7)
select new HourlyGraph
{
Day = (DayOfWeek)day,
Sales = lookup[day].Sum(x => x.QuantitySoldTransaction)
};
请注意,记录将按周日到周六的顺序打印
我写了下面的代码,基本上按天对我的销售额进行分组,然后我在图表上向用户展示它们,如下所示:
var DailyGraph = userStores.ToList().GroupBy(x => x.TransactionDate.Value.DayOfWeek).Select(pr => new { Day = pr.Key.ToString(), Sales = pr.Sum(x => x.QuantitySoldTransaction) });
var dayIndex = new List<string> { "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" };
ViewBag.DailyGraph = DailyGraph.OrderBy(e => dayIndex.IndexOf(e.Day.ToUpper())).ToList();
好吧,这里发生了什么,在第一行中,我将所有可用的销售额按星期几参数(即 Enumeration)分组...然后我创建了一个字符串列表,其中包含确切的日期名称,例如 Enumeration,我比较他们这样我就可以随着时间的推移(从周一到周日)准确地订购它们...
我现在的问题是,如果用户在特定日期没有销售...假设周一和周四他没有销售...我现在如何将这些缺失的日子添加到我的列表中?由于我正在使用枚举,所以我对如何做到这一点感到有点困惑...
因此当前输出为:
Tuesday 5 sales
Wednesday 9 sales
Friday 4 sales
Saturday 13 sales
Sunday 5 sales
所需的输出是:
Monday 0 sales // Add missing day enumeration and assign 0 value
Tuesday 5 sales
Wednesday 9 sales
Thursday 0 sales // Add missing day enumeration and assign 0 value
Friday 4 sales
Saturday 13 sales
Sunday 5 sales
有人可以帮我吗?
丹,是这样的吗?
for (int i = 0; i < DailyGraph.Count(); i++)
{
if (!dayIndex.Contains(DailyGraph[i].Day.ToUpper()))
{
DailyGraph.Add(new HourlyGraph { Day = dayIndex.ElementAt(i), Sales = 0 });
}
}
您可以在末尾添加缺少的日期,例如:
DailyGraph.AddRange(
dayIndex.Except(DailyGraph.Select(t => t.Day)).Select(r => new { Day = r, Sales = 0 }));
首先,我不会使用字符串作为您的密钥,因为如果有人不使用英语,这可能不起作用。
你可以这样做:
var dayIndex = new List<DayOfWeek> { DayOfWeek.Monday, DayOfWeek.Tuesday, /* etc */ };
var DailySales = dayIndex.Select(d => new { Day = d, Sales =
userStores.Where(x => x.TransactionDate.Value.DayOfWeek == d)
.Sum(u => u.QuantitySoldTransaction) }).ToList();
获取一周中所有可用的日子,并与您计算的每日图表进行左外连接:
var DailyGraph = userStores.ToList().GroupBy(x => x.TransactionDate.Value.DayOfWeek).Select(pr => new { Day = pr.Key, Sales = pr.Sum(x => x.QuantitySoldTransaction) });
from day in Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>()
from graph in DailyGraph.Where(g => g.Day == day).DefaultIfEmpty()
select new
{
Day = day.ToString(),
Sales = graph == null ? 0 : graph.Sales
}
您可以使用 .ToLookup()
子句,并注意假设您的视图模型是
public class HourlyGraph
{
public DayOfWeek Day { get; set; }
public int Sales { get; set; }
}
查询是
var lookup = userStores.ToLookup(x => (int)x.TransactionDate.DayOfWeek);
ViewBag.DailyGraph = from day in Enumerable.Range(0, 7)
select new HourlyGraph
{
Day = (DayOfWeek)day,
Sales = lookup[day].Sum(x => x.QuantitySoldTransaction)
};
请注意,记录将按周日到周六的顺序打印