在c#entity framework3.5中进行透视

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

表1如何使用cq中的linq转换为表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; } } 

最后,我必须将结果绑定到gridview。 有人可以请帮助

我认为这不能在Linq中完成。 Linq使用强类型对象,因此您的结果必须是强类型的,但是您说这不是因为可以随着时间的推移添加其他列(在.NET 3.5中没有动态行为)。

您必须在内存中查询不透明的数据并计算透视值并将它们传递给DataTable或者必须使用PIVOT命令(SQL Server 2005和更高版本)调用本机SQL,并将结果传递给网格视图。

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

编辑:

你真的需要真正的支点吗? “pivoted”表中没有计算。 看起来你只需要这个查询:

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

在为网格视图准备数据源时转换Rates