c#实体框架3.5中的Pivot

本文关键字:中的 Pivot 实体 框架 | 更新日期: 2023-09-27 17:57:48

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(不固定为200920102011,之后可以添加值20122013等(

分类如下

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; }
}

最后,我不得不将结果绑定到一个网格视图。有人能帮助吗

c#实体框架3.5中的Pivot

我认为在Linq中无法做到这一点。Linq使用强类型对象,所以您的结果必须是强类型的,但您说不能是,因为随着时间的推移可以添加其他列(在.NET3.5中没有动态行为(。

您必须查询内存中未转换的数据并计算数据透视值,然后将它们传递给DataTable,或者必须使用PIVOT命令(SQL Server 2005及更新版本(调用本机SQL并将结果传递给网格视图。

这是SQL Server报告服务及其Matrix(SSRS 2005(或Tablix(SSRS 2008(的典型场景。

编辑:

你真的需要真正的支点吗?您的"透视"表中没有计算。看起来你只需要这个查询:

var query = from c in ctx.Currencies.Include("Rates");

并在为网格视图准备数据源时转置CCD_ 3。