【发布时间】:2013-10-04 19:55:26
【问题描述】:
我被要求在 ComboBox 中添加一个“ALL”项,该查询被指定为其数据源,“ALL”项应该是控件中第一个看到的项
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)
但“ALL”项始终是最后一项,即使我尝试使用 OrderBy 方法,有人可以解释为什么吗?如果这是实现目标的最佳方式
【问题讨论】:
-
字典是键/值对的无序集合。如果您想订购,请使用
OrderedDictionary或推出您自己的。 -
我知道字典无法排序,我想我认为通过 Keys 上可能的 OrderBy,它可以对容器中的 Key 值进行排序。
-
在集合上使用诸如
OrderBy()之类的方法不会修改它,它只会创建一个在迭代时应用的集合视图。如果您遍历OrderBy()调用的结果,您将看到“有序”键。 -
感谢您为我解决这个问题
标签: vb.net linq-to-sql ienumerable