2011-12-13 32 views
2

我有一個SQL表,我希望每個記錄是一個數據網格列 另一個SQL表與多個記錄相關的每個fieldID。我想顯示每個值在數據網格的適當的列使用LINQ如何使用LinqtoSql從多個記錄創建datagrid列?

Example data: 
tbl_fields: 

FieldID | FieldName 
1   | First Name 
2   | Last Name 
3   | State 

tbl_records 
RecID | FieldID  | Value 
1    1   John    
1    2   Doe    
1    3   NY     
2    1   Melissa 
2    2   Rose    
3    1   Charlie 
3    2   Brown 
3    3   CA 

Display like this 
RecID | First Name | Last Name | State 
1    John    Doe   NY 
2    Melissa   Rose   null 
3    Charlie   Brown  CA 

有什麼建議嗎? 謝謝!

編輯: 這工作正常,但如果我不知道FieldNames之前手或更多的FieldNames區域添加?

var data = (from d in db. tbl_records 
       group d by d.RecID into g 
       select new 
       { 
        Id = g.Key, 
      FirstName = g.Where(d => d.FieldName == "First Name").FirstOrDefault().Value, 
     LastName = g.Where(d => d.FieldName == " Last Name").FirstOrDefault().Value, 
    State= g.Where(d => d. State == "State").FirstOrDefault().Value, 
       }); 
+0

你對Linq很熟悉,我會使用數據庫設計器讓它爲你生成SQL Joins ..然後如果你有Linq工具可以爲你生成Linq語句傳遞/讓它爲你轉換SQL到一個有效的linq聲明..這將幫助你學習/理解Linq ..這個工具被稱爲LinqPad這裏是一個鏈接到其他幾個很酷的Linq工具http://www.thinqlinq.com/default/LINQ-Tools.aspx – MethodMan

+0

+1,至少需要時間爲我們其他人格式化數據。 – jwiscarson

+0

謝謝你的評論。我對linq非常熟悉,但我不熟悉linq的顯示數據透視數據 – vts

回答

0

您可以使用數據透視查詢。您的查詢將自動生成列。

甲骨文 http://www.oracle-developer.net/display.php?id=506

爲SQL Server http://www.mssqltips.com/sqlservertip/1019/crosstab-queries-using-pivot-in-sql-server-2005/

+0

如果我不知道fieldNames,可以使用透視嗎?例如在我的例子中,我有「名」「姓」「國家」其他字段可以最終添加「地址」「城市」,如何可以使用樞軸使用所有可能的字段名稱而不知道之前? 謝謝 – vts

0

您可以添加一個DBML,添加到該文件你想要的表。然後做財產以後這樣的:

var dc = new YourdataContext(); 
    yourGrid.DataSource = dc.YourTable.Select(t => new { 
                t.Property1, 
                t.RelationTable.Property2, 
                etc...      
                }); 
    yourGrid.DataBind(); 

,並添加這在的Page_Loadpage_init

希望這有助於。 乾杯。

相關問題