请将数据输入1中的数据存入输出表1
Module | date(year) | xrate | yrate | cumrate
----------+------------+--------+---------+---------
No2_gft 2013 50 65 458
No2_gft 2014 59 69 458
No2_gft 2015 59 69 458
No2_gft 2016 59 65 458
No3_gft 2013 50 65 458
No3_gft 2014 59 69 458
No3_gft 2015 59 69 458
No4_gft 2016 59 65 458
No4_gft 2013 50 65 458
No4_gft 2014 59 69 458
No4_gft 2015 59 69 458
No3_gft 2016 59 69 458
到
模块;值类型 ; 2013年2014; 2015年; 2016
No2_gft; ; xrate; 50; 65; 458
No2_gft yrate 65 69
就像转置一样
答案 0 :(得分:1)
目前还不清楚您希望如何汇总或整理数据,但如果您希望按year
汇总这些数据,则可以执行以下操作:
var query = modules.GroupBy( m => m.date)
.Select( g =>
new
{
y = g.Key,
xrate = g.FirstOrDefault( x=> x.xrate),
yrate = g.FirstOrDefault( x => x.yrate)
});
这将为您提供一个分组年份列表,其中FirstOrDefault()
为聚合函数:
Year | xrate | yrate
-------+----------+--------
2013 50 65
2014 59 69
或者您可以按匿名类型进行分组:
.GroupBy( m =>
new
{
m.date,
m.xrate,
m.yrate
})
而不只是m.date
,因为您的date
,xrate
和yrate
对所有行都相同。
编辑那么,为了转动这个模块列表,我找不到更简单,更容易的东西:
var query = Modules.GroupBy(m => m.ModuleValue)
.Select(g => new { ModuleValue = g.Key, Values = g });
Func<Module, bool> matchy2013 = m => m.Year == 2013;
Func<Module, bool> matchy2014 = m => m.Year == 2014;
Func<Module, bool> matchy2015 = m => m.Year == 2015;
Func<Module, bool> matchy2016 = m => m.Year == 2016;
IList<NewModule> PivotedModules = new List<NewModule>();
foreach (var item in query)
{
var xrateRow = new NewModule
{
ModuleValue = item.ModuleValue,
ValueType = "xrate",
y2013 = item.Values.Where(matchy2013).FirstOrDefault().xrate,
y2014 = item.Values.Where(matchy2014).FirstOrDefault().xrate,
y2015 = item.Values.Where(matchy2015).FirstOrDefault().xrate,
y2016 = item.Values.Where(matchy2016).FirstOrDefault().xrate
};
var yrateRow = new NewModule
{
ModuleValue = item.ModuleValue,
ValueType = "yrate",
y2013 = item.Values.Where(matchy2013).FirstOrDefault().yrate,
y2014 = item.Values.Where(matchy2014).FirstOrDefault().yrate,
y2015 = item.Values.Where(matchy2015).FirstOrDefault().yrate,
y2016 = item.Values.Where(matchy2016).FirstOrDefault().yrate
};
var cumrateRow = new NewModule
{
ModuleValue = item.ModuleValue,
ValueType = "cumrate",
y2013 = item.Values.Where(matchy2013).FirstOrDefault().cumrate,
y2014 = item.Values.Where(matchy2014).FirstOrDefault().cumrate,
y2015 = item.Values.Where(matchy2015).FirstOrDefault().cumrate,
y2016 = item.Values.Where(matchy2016).FirstOrDefault().cumrate
};
PivotedModules.Add(xrateRow);
PivotedModules.Add(yrateRow);
PivotedModules.Add(cumrateRow);
}
给它一个托盘。 您应该添加一个新类:
public class NewModule
{
public string ModuleValue { get; set; }
public string ValueType { get; set; }
public int y2013 { get; set; }
public int y2014 { get; set; }
public int y2015 { get; set; }
public int y2016 { get; set; }
}
PivotedModules
应包含以下数据:
Module | ValueType | 2013 | 2014 | 2015 | 2016
---------+------------+--------+--------+--------+------
No2_gft xrate 50 59 59 59
No2_gft yrate 65 69 69 65
No2_gft cumrate 458 458 458 458
No3_gft xrate 50 59 59 59
No3_gft yrate 65 69 69 69
No3_gft cumrate 458 458 458 458
No4_gft xrate 50 59 59 59
No4_gft yrate 65 69 69 65
No4_gft cumrate 458 458 458 458