【问题标题】:Transform Row Data to Columns in Linq [duplicate]在 Linq 中将行数据转换为列 [重复]
【发布时间】:2017-06-28 10:52:41
【问题描述】:

我在变量“结果”中有如下数据

StaffName   ProjectName    Month      Weeks
Venkat      Project1       January    4
Venkat      Project1       February   2
Venkat      Project2       January    3
Kumar       Project1       March      5
Kumar       Project4       December   3

现在我想要下面的输出

StaffName   ProjectName   Jan   Feb  Mar  Dec   Total
Venkat       Project1      4     2               6
Venkat       Project2      3                     3
Kumar        Project1                 5          5
Kumar        Project4                      3     3

如果你有任何想法,请帮助我

【问题讨论】:

标签: c# linq


【解决方案1】:

我认为您想以动态方式执行此操作,但没有简单的方法。

所以只需使用GroupBy,卢克。像这样:

var res = data.GroupBy(x => new { x.StaffName, x.ProjectName })
    .Select(x => new
    {
        StaffName = x.Key.StaffName,
        ProjectName = x.Key.ProjectName,
        Jan = x.Where(y => y.Month == "January").Sum(y => y.Weeks),
        Feb = x.Where(y => y.Month == "February").Sum(y => y.Weeks),
        Mar = x.Where(y => y.Month == "March").Sum(y => y.Weeks),
        Dec = x.Where(y => y.Month == "December").Sum(y => y.Weeks),
        //Add more month here
        Total = x.Sum(y => y.Weeks)
    });

这是fiddle

【讨论】:

  • 感谢您的回复,它正在工作,但我只想显示“结果”变量中可用的月份。如果我的 Result 变量包含所有月份,我们应该显示所有月份,或者如果我的 Result 变量包含(例如:一月和二月)它应该只显示这两个月。
  • @user2377494 我认为你会更好地处理每个月的数据,并且只显示你想要的。当事先知道对象的所有属性时,C# 效果最好(事实上,大多数时候这是唯一的选择,除非您使用 dynamic)。
猜你喜欢
  • 2018-11-11
  • 1970-01-01
  • 2014-09-08
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2016-09-30
  • 2019-07-22
相关资源
最近更新 更多