使用linq进行分组和聚合

时间:2017-03-11 16:22:20

标签: c# linq

您好我有一个下面的列表需要使用Linq方法语法进行分组和聚合。

| id      |Code|Descr | Number | Expiry    |
|---------|----|------|--------|-----------|
| guidId1 | A  | Desc1| Number1| 2017-03-18|
| guidId2 | A  | Desc1| Number1| 2017-03-18|
| guidId3 | B  | Desc2| Number1| 2017-03-18|
| guidId4 | B  | Desc2| Number1| 2017-03-18|
| guidId5 | C  | Desc3| Number1| 2017-03-18|
| guidId6 | A  | Desc1| Number2| 2020-05-20|
| guidId7 | A  | Desc1| Number2| 2020-05-20|
| guidId8 | A  | Desc1| Number2| 2020-05-20|
| guidId9 | B  | Desc2| Number2| 2020-05-20|
| guidId10| C  | Desc3| Number2| 2020-05-20|
| guidId11| C  | Desc3| Number2| 2020-05-20|

我试过这个,但我不确定如何包含计数:

myList.GroupBy(s => new { s.Number, s.Code, s.Expiry});

我想从列表中输出:

{Code = "A",Descr = "Desc1",Number = "Number1",Expiry = "2017-03-18", Count = 2}
{Code = "B",Descr = "Desc2",Number = "Number1",Expiry = "2017-03-18", Count = 2}
{Code = "C",Descr = "Desc3",Number = "Number1",Expiry = "2017-03-18", Count = 1}
{Code = "A",Descr = "Desc1",Number = "Number2",Expiry = "2020-05-20", Count = 3}
{Code = "B",Descr = "Desc2",Number = "Number2",Expiry = "2020-05-20", Count = 1}
{Code = "C",Descr = "Desc3",Number = "Number2",Expiry = "2020-05-20", Count = 2}

提前致谢

1 个答案:

答案 0 :(得分:1)

您已对NumberCodeExpiry进行了分组,但您的结果也需要Descr。您需要在组中包含该组,然后获取组的计数。

var query =
    from s in myList
    group 1 by new { s.Code, s.Descr, s.Number, s.Expiry } into g
    select new { g.Key.Code, g.Key.Descr, g.Key.Number, g.Key.Expiry, Count = g.Count() };