使用ASP LINQ +私有比较方法选择,分组,求和

时间:2019-02-24 09:54:06

标签: sql asp.net-mvc linq

我正在研究ASP MVC项目,我需要将一些数据导出到excel文件中。事实是,我需要对一些行进行汇总以显示单个行。我对sql或linq不熟悉,我正在努力获得所需的结果。

应该有4列:requester(string), date(datetime), collection(string), timeinvested(int).

默认情况下,分组应按“集合”列(字符串)进行,并且如果填写了请求者或日期的过滤器输入,则将是下一层分组。

分组结果应总结“已花费”列。

示例:

requester, date, collection, timeinvested
(1) john, jan 1st, 2019, collection1, 1
(2) mike, jan 1st, 2019, collection1, 3
(3) eric, jan 1st, 2019, collection1, 2
(4) july, jan 1st, 2019, collection2, 5
(5) john, jan 1st, 2012, collection1, 3

这里我们有5行来自表,一旦我们过滤以默认情况下仅导出(列集合),则行1 + 2 + 3 + 5应该合计为1行,而第二行将是第4行,因为集合是不同的。像这样:

requester, date, collection, timeinvested
(1) john, jan 1st, 2019, collection1, 9
(2) july, jan 1st, 2019, collection2, 5

如果我选择也按请求者或日期进行过滤,则它应相应地适用。

这里最大的一件事情是,有一个私有方法可以将日期检查为特定日期,如果日期在检查日期之后或之前,则应将日期年份导出到文件中。例如:相对日期为同年12月1日 如果行日期在相对日期之前,那么我们应该写日期year-1;

谢谢

var q = (from a in items
                 select new {
                     Requester = a.Requester.Name,
                     Collection = a.Collection.Name,
                     TimeSpent = a.TimeSpent,
                     Year = a.Date,
                 })

                 .ToList()
                 .GroupBy(x => new {
                     x.Requester,
                     x.Collection,
                     x.Year,
                     x.TimeSpent
                 })
                 .Select(y => new CollectionModel {
                     Requester = y.Key.Requester,
                     Collection = y.Key.Collection,
                     TimeSpent = y.Sum(z => Convert.ToInt32(z.TimeSpent)),
                     Year = checkDate(y.Key.Year),
                 });

        return q.ToList();

这就是我的工作方式:

var q = (from a in items
                 select new {
                     Requester = a.Requester.Name,
                     Collection = a.Collection.Name,
                     TimeSpent = a.TimeSpent,
                     Year = a.Date,
                 })
                 .Where(Where(a => dt == null || (dt != null && a.Year == dt.Year))
                 .ToList()
                 .GroupBy(x => new {
                     x.Requester,
                     x.Collection,
                     x.Year,
                 })
                 .Select(y => new CollectionModel {
                     Requester = y.Key.Requester,
                     Collection = y.Key.Collection,
                     TimeSpent = y.Sum(z => Convert.ToInt32(z.TimeSpent)),
                     Year = checkDate(y.Key.Year),
                 });

        return q.ToList();

1 个答案:

答案 0 :(得分:0)

首先,从GroupBy中删除“ x.TimeSpent”,您需要聚合该变量,而不是对其进行分组。其次,您也可以发布输出吗?

相关问题
最新问题