【发布时间】:2017-07-13 14:07:06
【问题描述】:
我正在尝试按星期几对我的数据进行分组,然后像这样对销售额求和:
ViewBag.DailyGraph = ctx.StoreItemTransactions
.GroupBy(x => x.TransactionDate.Value.DayOfWeek)
.Select(pr => new { Day = pr.Key,
Sales = pr.Sum(x => x.QuantitySoldTransaction)
})
.ToDictionary(y => y.Day, y => y.Sales);
但我遇到了这个异常:
LINQ to Entities 不支持指定的类型成员“DayOfWeek”。仅支持初始化器、实体成员和实体导航属性。
我该如何解决这个问题?我基本上试图将我的所有数据按每周 7 天分组,以便输出为:
Monday 1
Tuesday 5
...
Sunday 14
有人可以帮我解决这个问题吗?
@StephenMuecke,通过应用你告诉我的内容,我能够完成代码并按应有的方式对所有时间进行排序:
var DailyGraph = ctx.StoreItemTransactions.ToList()
.GroupBy(x => x.TransactionDate.Value.DayOfWeek)
.Select(pr => new HourlyGraph
{ 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();
也许有更好的方法来解决这个问题,我也会等你的回答=)
【问题讨论】:
-
您可以先实现查询 -
StoreItemTransactions.ToList().GroupBy(.... -
DayOfWeek 是哪种类型的变量?
-
@Tinwor 它是可枚举的 DayOfWeek
-
@StephenMuecke thx 是的,它就像一个魅力。快速提问伙伴,现在对所有天进行排序的最佳方法是什么,因为它们是字符串形式的,我想我不能只说:.OrderBy(x=>x.Day) => 这个“应该” t" 做任何事情,因为这是字符串? =D
-
它是一个
enum,因此您可以将其转换为int(例如(int)Day),但是您使用的是字典,因此排序实际上没有意义-您可能需要一个视图模型属性DayOfWeek Day和int Sales并将查询投影到该模型的集合中
标签: c# asp.net asp.net-mvc linq group-by