如何使用LinqtoSql从多个记录创建datagrid列?

时间:2011-12-13 14:38:59

标签: c# asp.net linq linq-to-sql datagrid

我有一个sql表,我希望每个记录都是一个datagrid列 另一个sql表,其中包含与每个fieldID相关的多条记录。我想使用linq

在数据网格的适当列中显示每个值
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,
               });

2 个答案:

答案 0 :(得分:0)

您可以使用透视查询。您的查询将自动生成列。

表示oracle 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/

答案 1 :(得分:0)

您可以添加dbml,将所需的表添加到此文件中。然后做类似的事情:

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

并将其添加到 page_load page_init

希望这会有所帮助。 欢呼声。