【问题标题】:Sum and grouping using linq使用 linq 求和和分组
【发布时间】:2013-06-03 20:16:14
【问题描述】:

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

图片1

图片2

首先我想我会这样做: 一个名为 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# 在本地完成,尽管这可能不是一件坏事。

【问题讨论】:

  • 如果您可以使用DateTime 而不是string 作为日期,或者至少将int 字段用于月份和年份,这对我们来说会更容易一些。你能做到吗?此外,您似乎只为每台服务器添加了一个 CostData...
  • 将日期设为 DateTime 没有问题。将每台服务器的所有月份统计信息集中到一个地方是我遇到的问题之一。我也许应该使用哈希表或字典以某种方式将它们构建在一起,但无法弄清楚究竟是如何...
  • 您介意我稍微重构一下您的类/实例化语句吗?
  • 一点也不,继续。我认为无论如何该设置存在缺陷,因为我还需要包括 CostDesc 每月总计,我一直坚持让服务器每月总计工作,我想如果我能破解我可以做同样的事情CostDesc.
  • Image1 中的总和从何而来?

标签: c# sql linq group-by sum


【解决方案1】:

您需要执行通常称为 PIVOT 或交叉表的操作。这应该会有所帮助:Is it possible to Pivot data using LINQ?

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

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

【讨论】:

    猜你喜欢
    • 2016-04-02
    • 1970-01-01
    • 2017-06-13
    • 2017-06-24
    • 2020-01-24
    • 2022-01-22
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多