2013-10-04 33 views
0

有人問我在此查詢被指定爲它的數據源組合框添加一個「ALL」項時訂購,項目「ALL」應該是在控制看到的第一個如何使用ToDictionary()

 Dim qryEmp = From emp In db.Members.ToList 
         Order By emp.LogonId Ascending 
         Select New GPUserQueryResult With { 
          .LoginId = emp.LogonId, 
          .FullName = GetUserName(emp.LogonId) 
         } 

我最終使用的代碼是這樣的:

  Dim allUser() As GPUserQueryResult = {New GPUserQueryResult With {.LoginId = -1, .FullName = AllValues}} 
      Dim addEmpty As IEnumerable(Of GPUserQueryResult) = allUser 

      Dim allRecs As IEnumerable(Of GPUserQueryResult) = addEmpty.Union(qryEmp) 

      EmpList = allRecs.ToDictionary(Function(x) x.LoginId, Function(x) x.FullName) 

起初,雖然我嘗試這樣:

  Dim allUser() As GPUserQueryResult = {New GPUserQueryResult With {.LoginId = -1, .FullName = AllValues}} 
      Dim addEmpty As IEnumerable(Of GPUserQueryResult) = allUser 

      Dim allRecs As IEnumerable(Of GPUserQueryResult) = qryEmp.Union(addEmpty) 

      EmpList = allRecs.ToDictionary(Function(x) x.LoginId, Function(x) x.FullName) 
      EmpList.Keys.OrderBy(Function(x) x) 

卜t「ALL」項總是最後一項,即使我試圖使用OrderBy方法,有人可以解釋爲什麼?如果這是實現目標的最佳方式

+0

字典是鍵/值對的_unordered_集合。如果您想訂購,請使用['OrderedDictionary'](http://msdn.microsoft.com/zh-cn/library/system.collections.specialized.ordereddictionary.aspx)或推出自己的訂單。 –

+0

我知道字典無法排序,我想我認爲在Keys上有可能的OrderBy,它可以在容器中排序Key值。 – CheGueVerra

+1

在集合上使用'OrderBy()'等方法不會對其進行修改,它只會創建集合的視圖,以便在迭代時應用。如果你迭代了'OrderBy()'調用的結果,你會看到「有序」的鍵。 –

回答

1

我試過了上面的代碼,並且首次按預期顯示了「ALL」項。不知道爲什麼它不適合你。但是,另一種更簡單的方式來執行您所需的操作:

Dim qryEmp = .... ' your existing linq to retrieve employees 

現在您需要將「ALL」項插入到第一個位置。首先轉換qryEmp列出對象:

Dim EmpList = qryEmp.ToList() 

將 「ALL」 項目位置0:

EmpList.Insert(0, New GPUserQueryResult With {.LoginId = -1, .FullName = AllValues}) 

綁定列表組合框:

ComboBox1.DisplayMember = "FullName" 
ComboBox1.ValueMember = "LoginId" 
ComboBox1.DataSource = New BindingSource(EmpList, Nothing) 

樣品:

enter image description here

+0

我知道如何在T(List of List)中做到這一點,我試圖用Dictionary來達到同樣的效果,因爲Dictionary對於數據源來說就像是一種過度操作。 – CheGueVerra

相關問題