我一直在尝试从看起来像image1的表中编译数据并将其转换并显示到像image2这样的表中。
IMAGE1
img1 http://i44.tinypic.com/fjesl2.png
图像2
img1 http://i39.tinypic.com/el790o.png
首先我想我会这样做: 一个名为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#在本地完成,尽管这可能不是一件坏事。
答案 0 :(得分:2)
您需要执行通常所说的PIVOT或交叉表。这应该有助于:Is it possible to Pivot data using LINQ?
然后看起来你想要一个总计函数来添加特殊的总行,然后可能是一个自定义的排序顺序。完成转轴后,其余部分相当容易。
完成行后,可以通过执行单独的查询来实现总行数(分组依据)。然后将两个结果结合在一起。如果添加排序列,则可以对结果进行排序,最后得到完成的结果集。