2012-08-07 137 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