C#实体框架3.5中的数据透视表

3
ISO Code description    Year    value
CAD Canadian Dollar     2009    1.3001
CAD Canadian Dollar     2010    1.3001
CAD Canadian Dollar     2011    0.0001
EUR Euro                2009    1.0000
EUR Euro                2010    1.0000
EUR Euro                2011    0.0001
USD US Dollar           2009    1.2300
USD US Dollar           2010    1.2300
USD US Dollar           2011    0.0001

表格1

ISO Code    description 2009    2010    2011
CAD Canadian Dollar     1.3001  1.3001  0.0001
EUR Euro                1.0000  1.0000  0.0001
USD US Dollar           1.2300  1.2300  0.0001

表格2

如何使用c#中的linq将表格1转换为表格2,假设年数是动态的(不固定于2009、2010、2011,之后可以添加2012、2013等值)

以下是类:

class Currency
 {
    public string ISO Code { get; set; }
    public string Description { get; set; }
 }
class Rate
{        
    public string ISO Code { get; set; }
    public int Year { get; set; }
    public inr Value { get; set; }

}

最后我需要将结果绑定到一个网格视图中。有人可以帮忙吗?
1个回答

3
我认为这在Linq中无法完成。Linq使用强类型对象,因此您的结果必须是强类型的,但您说它不可能这样做,因为随着时间的推移可能会添加其他列(.NET 3.5中没有动态行为)。
您必须查询未枢轴的数据并在内存中计算枢轴值,并将它们传递给 DataTable ,或者您必须调用带有 PIVOT 命令的本机SQL(SQL Server 2005及更高版本),并将结果传递给您的网格视图。
这是SQL Server报告服务及其矩阵(SSRS 2005)或Tablix(SSRS 2008)的典型场景。
编辑:
你真的需要真正的枢轴吗?在您的“枢轴”表中没有计算。看起来您只需要这个查询:
var query = from c in ctx.Currencies.Include("Rates");

在为网格视图准备数据源时,需要转置 Rates


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接