-1

我一直在尝试从看起来像 image1 的表中编译数据,并将其转换并显示为像 image2 这样的表。

图片1

图像1

图片2

图像1

首先,我想我会这样做: 一个名为 Region 的类包含一个名为 server 的类的列表 服务器类将有 3 个属性 serverid、servername 和一个名为 CostData 的类的列表。CostData 将存储年月和当月的成本总和。

我已经使用 linq 管理了一个查询,该查询为我提供了每个服务器每月的总数,例如:2013 年,月:1,服务器:Server1,总计:460

我仍然发现自己缺少一些东西。首先,我需要将每台服务器的每月总计放在一个地方,就像我用我的 CostData 尝试过的那样,这样我使用 html 就可以迭代每个服务器的月份并将它们显示在列中。

此外,使用此解决方案,我仍然错过了 CostDesc 列,我还想显示每月总计,就像您可以在 image2 上看到的那样。

这是我的课程:

public class Region
{        
public List<Server> Servers { get; set; }
}

public class Server
{               
public string ServerID { get; set; }
public string ServerName { get; set; }
public List<CostData> MonthlyCosts { get; set; }
}

public class CostData
{
public string Date { get; set; }
public double Sum { get; set; }
}

这就是我构建对象的方式:

Region r = new Region();
r.servers = new List<Server>();

foreach (var row in linqQueryResult)
    {
            Server s = new Server();
            s.ServerID = row.ServerID;
            s.ServerName = row.ServerName;
            s.MonthlyCosts = new List<CostData>();
            CostData cd = new CostData();
            cd.Date = row.Year.ToString() + "-" + row.Month.ToString();
            cd.Sum = row.ServerSum;
            s.MonthlyCosts.Add(cd);                    
            r.Servers.Add(s);

    }


    return View(r);

你有什么指点或建议吗?我希望有更多经验的人可以看看并给我一些建议,而不是要求整个解决方案,尽管如果你想这样做我不介意:)

我想知道是否没有一种使用 linq 获取我想要的数据的好方法。问题是我只能访问一个存储过程,它只会给我像 image1 中的数据。所有对数据的操作都必须使用 c# 在本地完成,尽管这可能不是一件坏事。

4

1 回答 1

2

您需要执行通常称为 PIVOT 或交叉表的操作。这应该对此有所帮助:是否可以使用 LINQ 透视数据?

然后,您似乎想要执行添加特殊总计行的总计功能,然后可能需要自定义排序顺序。完成支点后,其余部分相当容易。

总行数可以通过在完成数据透视以合计行数(分组依据)后执行单独的查询来实现。然后将两个结果合并在一起。如果添加排序列,则可以对结果进行排序并最终获得完成的结果集。

于 2013-06-04T03:53:28.157 回答