Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将列转换为行,将日期行转换为列_C#_Sql_Asp.net Mvc_Linq_Transpose - Fatal编程技术网

C# 将列转换为行,将日期行转换为列

C# 将列转换为行,将日期行转换为列,c#,sql,asp.net-mvc,linq,transpose,C#,Sql,Asp.net Mvc,Linq,Transpose,这是一个ASP.NET MVC项目。目前,我有一个表,如: Skill Date Offered Answered Abandoned SampleSkill1 12/1/2013 53585 52549 1036 SampleSkill2 12/1/2013 7170 6997 173 SampleSkill1 11/1/2013 45635 45189

这是一个ASP.NET MVC项目。目前,我有一个表,如:

Skill           Date        Offered     Answered    Abandoned
SampleSkill1    12/1/2013   53585       52549       1036
SampleSkill2    12/1/2013   7170        6997        173
SampleSkill1    11/1/2013   45635       45189       446
SampleSkill2    11/1/2013   6481        6378        103
SampleSkill1    10/1/2013   54838       54208       630
SampleSkill2    10/1/2013   7361        7235        126
我试图在如下表格中获取数据:

样本杀手1

Type        Oct     Nov     Dec
Offered     53585   52549   1036
Answered    45635   45189   446
Abandoned   54838   54208   630
我能做的最接近的事情是这样做:

var StatsList = db.Stats.Where(c => c.Skill == "SampleSkill1").ToList();
var OfferedStatsQuery = StatsList
    .GroupBy(c => c.Skill)
    .Select(g => new StatsPivot {
        Skill = g.Key,
        Oct = g.Where(c => c.Date.Month == 10).Sum(c => c.Offered),
        Nov = g.Where(c => c.Date.Month == 11).Sum(c => c.Offered),
        Dec = g.Where(c => c.Date.Month == 12).Sum(c => c.Offered)
    });
var AnsweredStatsQuery = StatsList
    .GroupBy(c => c.Skill)
    .Select(g => new StatsPivot {
        Skill = g.Key,
        Oct = g.Where(c => c.Date.Month == 10).Sum(c => c.Answered),
        Nov = g.Where(c => c.Date.Month == 11).Sum(c => c.Answered),
        Dec = g.Where(c => c.Date.Month == 12).Sum(c => c.Answered)
    });

我确信这不是做这样事情的最佳/正确方式,但我对LINQ是新手。关于如何有效地实现预期结果,有什么建议吗?

我的建议是在数据库端(可能通过存储过程)而不是在代码中执行。不太确定这个建议是否对你有限制,因为这样你的工作就会变得非常简单、高效,你也会有很多选择。查看链接以获得类似问题的答案


希望这对您有所帮助。

当您使用Linq进行此类操作时。修改代码并不容易。所以试着从数据库的角度来做这些事情

请参见以下示例