如何分组然后透视数据

时间:2019-06-05 21:22:09

标签: c# .net

我试图进行分组,然后将一些数据透视以显示在asp.net视图上。

这是我的View Model类。

public class myModel
{

    public string id { get; set; }
    public string fund{ get; set; }
    public string account{ get; set; }
    public string amount{ get; set; }

}

这是从数据库返回的示例数据

id   fund       account   amt
1     101       1001      25.70
2     101       1001      10.00
3     101       1001      12.00
4     101       1002      -5.0
5     201       2001      12.00
6     201       2001      11.00

现在我有一个查询,该查询返回上述数据并将其映射到上述模型。本质上,我有一个包含上述数据的对象列表。

现在,我想对这些数据进行分组和汇总,并在我的视图中显示如下。

fund
    account      sum of all amt
    account       sum of all amt
fund
    account       sum of all amt
    account       sum of all amt

类似


101
   1001      47.00
   1002      -5

   ....
201
   2001   23

and so on


我该怎么做?

我有一个如上所述的对象列表。

我正在考虑创建另一个类,并将它们映射到该类,但我可能正在使其变得比所需的更加复杂

public class pivot
{
        public string fund { get; set; }
        public List < pivotdetail >detail{ get; set; }
 }

public class pivotdetail
{
       pretty obvious
}




关于如何做到这一点的任何想法,或者我应该如何处理?

1 个答案:

答案 0 :(得分:0)

您正在创建分组分组。首先,在最深层进行分组,然后对上层进行分组以获得所需的结构。

from x in Data
group x.Amount by new { x.Fund, x.Account } into g
group new
{
    g.Key.Account,
    Amount = g.Sum(),
} by g.Key.Fund

请注意,这通常效率不高,因为它将为每个组创建新查询。您可能希望将其限制为对数据库进行单个分组调用,然后再对代码进行分组。

from g in (from x in Data
          group x.Amount by new { x.Fund, x.Account } into g
          select new
          {
            g.Key.Fund,
            g.Key.Account,
            Amount = g.Sum()
          }).AsEnumerable()
group new
{
    g.Account,
    g.Amount,
} by g.Fund;