2011-12-13 63 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

希望这有助于。 干杯。