【发布时间】:2019-06-20 14:48:11
【问题描述】:
有两个实体,例如 job 和 solution。 他们每个人都有一个date字段和一个level字段和一个quantity字段。
需要将它们组合起来,先按级别分组,然后按月份分组,同时还要对它们的数量进行汇总。
我尝试了不同的选项,但没有任何结果。主要问题是按 月 分组,并对随附表格中的数字求和。
也就是说,输出应该是一串求和的数字,按级别分组,然后按月份分组。
例如:
var jobs = new List<Job>()
{
new Job { Level = 1, Date = new DateTime(2019, 1, 1), Quantity = 111 },
new Job { Level = 1, Date = new DateTime(2019, 1, 20), Quantity = 222 },
new Job { Level = 2, Date = new DateTime(2019, 2, 1), Quantity = 333 },
new Job { Level = 2, Date = new DateTime(2019, 2, 20), Quantity = 444 }
};
var solutions = new List<Solution>()
{
new Solution { Level = 1, Date = new DateTime(2019, 2, 1), Quantity = 555 },
new Solution { Level = 2, Date = new DateTime(2019, 2, 20), Quantity = 666 },
new Solution { Level = 1, Date = new DateTime(2019, 1, 1), Quantity = 777 },
new Solution { Level = 2, Date = new DateTime(2019, 1, 20), Quantity = 888 }
};
输出:
- 1 级 -> 2019 年 1 月 1 日 -> 1110 (111 + 222 + 777)
- 1 级 -> 2019 年 2 月 1 日 -> 555
- 2 级 -> 2019 年 1 月 1 日 -> 888
- 2 级 -> 2019 年 2 月 1 日 -> 1443 (333 + 444 + 666)
等等。是的,这一切都在 EF6 中。
【问题讨论】:
-
发布一些代码以了解您迄今为止尝试过的内容,以便其他人可以帮助您编写代码并了解它的问题
-
请至少发布数据结构和更真实的输入和输出。
2/1/2018是 2 月 1 日还是 1 月 2 日?添加一个包含输入的列表并评论预期的输出 -
也许这个例子可以帮助你: var aList = jobs.Select(x => new Tuple
(x.Level, x.Date, x.Quantity)) ; var bList = solutions.Select(x => new Tuple (x.Level, x.Date, x.Quantity)); var groupedList = aList.Union(bList).GroupBy(x => new { x.Item2, x.Item1 }).Select(x => new { Date = x.Key.Item2, Sum = x.Sum(y = > y.Item3) }); var orderedList = groupedList.OrderBy(x => x.Date);
标签: c# .net linq entity-framework-6