2011-05-28 76 views
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樞軸在c#實體框架3.5

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被轉換爲在c#使用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。有人可以請幫助

回答

2

我認爲這不能在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準備網格視圖數據源時。