C# LINQ过滤和聚合
我有一个项目列表,可以这样表示:C# LINQ过滤和聚合,c#,linq,grouping,aggregation,C#,Linq,Grouping,Aggregation,我有一个项目列表,可以这样表示: ClientNo Name Date Time 0001 Mike 01/12/2000 6 0002 Dave 01/12/2000 12 0001 Mike 01/12/2000 10 0002 Dave 02/12/2000 6 from p in ListofModel group p by new { p.
ClientNo Name Date Time
0001 Mike 01/12/2000 6
0002 Dave 01/12/2000 12
0001 Mike 01/12/2000 10
0002 Dave 02/12/2000 6
from p in ListofModel
group p by new { p.ClientNo, p.Date, p.Name } into g
orderby g.key.Date
select new ModelClass
{
ClientNo = g.Key.ClientNo,
Name = g.key.Name,
Date = g.Key.Date,
Time = g.Sum(x => x.Time)
}
是否可以使用LINQ对其进行分组和聚合,使其看起来像这样
ClientNo Name Date Time
0001 Mike 01/12/2000 16
0002 Dave 01/12/2000 12
0002 Dave 02/12/2000 6
我试图为每个客户返回一个特定日期的汇总行。我一直在摆弄下面的东西,但没能把它弄对。不幸的是,我对LINQ的了解很差
var result = from p in ListofModel
group p by new { p.ClientNo, p.Date, p.Name, p.Time } into g
orderby g.key.Date
select new ModelClass
{
ClientNo = g.Key.ClientNo,
Name = g.key.Name,
.....
}
毫不奇怪,这并没有给我想要的结果。如何修复它?我认为它应该是这样的:
ClientNo Name Date Time
0001 Mike 01/12/2000 6
0002 Dave 01/12/2000 12
0001 Mike 01/12/2000 10
0002 Dave 02/12/2000 6
from p in ListofModel
group p by new { p.ClientNo, p.Date, p.Name } into g
orderby g.key.Date
select new ModelClass
{
ClientNo = g.Key.ClientNo,
Name = g.key.Name,
Date = g.Key.Date,
Time = g.Sum(x => x.Time)
}
您不希望按时间分组,因此不应将其包含在组键中。我认为它应该如下所示:
ClientNo Name Date Time
0001 Mike 01/12/2000 6
0002 Dave 01/12/2000 12
0001 Mike 01/12/2000 10
0002 Dave 02/12/2000 6
from p in ListofModel
group p by new { p.ClientNo, p.Date, p.Name } into g
orderby g.key.Date
select new ModelClass
{
ClientNo = g.Key.ClientNo,
Name = g.key.Name,
Date = g.Key.Date,
Time = g.Sum(x => x.Time)
}
您不希望按时间分组,因此不应将其包含在组键中。尝试以下操作:
var result = from p in ListofModel
group p by new { p.ClientNo, p.Name, p.Date } into g
orderby g.Key.Date
select new ModelClass
{
ClientNo = g.Key.ClientNo,
Name = g.Key.Name,
Date = g.Key.Date,
Time = g.SUM(t => t.Time)
}
试试这个:
var result = from p in ListofModel
group p by new { p.ClientNo, p.Name, p.Date } into g
orderby g.Key.Date
select new ModelClass
{
ClientNo = g.Key.ClientNo,
Name = g.Key.Name,
Date = g.Key.Date,
Time = g.SUM(t => t.Time)
}
-1:不编译,不符合OP@Daniel希尔加思。我同意你的看法。我没有在GROUPBY子句中添加被选中的列(不包括聚合的列)-1:不会编译并且不符合OP@Daniel希尔加思。我同意你的看法。我没有在GROUPBY子句中添加被选中的列(不包括聚合的列)