我正在研究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();
答案 0 :(得分:0)
首先,从GroupBy中删除“ x.TimeSpent”,您需要聚合该变量,而不是对其进行分组。其次,您也可以发布输出吗?