2012-08-07 41 views
0

我有一个学生课。使用linq将所有值从字典中获取到匿名类型列表

class student : DynamicObject 
    { 
      public Dictionary<string, object> dics = new Dictionary<string, object>(); 
    } 

在为此类动态添加属性。 我填充后

list<student> lists, 

我怎样才能检索到的键和值在每个学生类使用LINQ的字典。这样我就可以将它绑定到数据网格。每个学生对象中的所有字典的键都是相同的,因为这将是列名称。这些值将与列值不同。这样我可以将这个匿名类型绑定到数据网格。 我尝试了以下方法。但结果是不正确的。

var result = lists.SelectMany(x => x.Dictionary.Keys).Select(m => new 
       { 
        StudentID = m[1], 
        RegNo = m[2], 
        JoinYear = m[3] 
       }).ToList(); 

最后,我可以绑定像这样,

grid.DataSource = result; 
grid.DataBind(); 

所以网格将显示从字典中键和所有行的列将使用字典中的值来填充。任何帮助?

非常感谢。

+0

这是WPF DataGrid控件还是WinForms DataGridView控件? – 2012-08-07 07:01:43

+0

asp.net。那可能吗 ? – 2012-08-07 07:12:05

+0

如果每个学生的密钥都一样,为什么你要使用字典而不是适当的属性? – Rawling 2012-08-07 07:36:23

回答

1

SelectMany是不必要的 - 你要选择一个行每个学生,对每个学生每个属性不是一个行,所以你只需要一个Select

var result = lists.Select(m => new 
    { 
     StudentID = m.Dict["StudentID"], 
     RegNo = m.Dict["RegNo"], 
     JoinYear = m.Dict["JoinYear"] 
    }); // no need for ToList if you're just binding. 

课的海事组织你会在你的Student对象上使用强类型属性并从存储过程中正确填充它们会好得多; nyou根本不需要匿名对象。

+1

非常感谢 – 2012-08-07 08:09:47