我试图从数据表中获取一些值以将它们用作过滤器。 我提取值,然后我填充组合框的数据源。
问题是,我想添加一个额外的项目,就像选项" all"而且我已经陷入了困境。
我的代码:
Dim objFilter As IEnumerable
objFilter = From obj In m_DataSet.Tables(0) _
Select New With {Key .Cod = obj.Field(Of String)("X"), _
.Desc = obj.Field(Of String)("Y")} Distinct.ToList
Me.combobox.DataSource = ienCentrosOrigen
Me.combobox.ValueMember = "Cod"
Me.combobox.DisplayMember = "Desc"
我尝试过使用" union"像这样:
objFilter = From obj In m_DataSet.Tables(0) _
Select New With {Key .Cod = obj.Field(Of String)("X"), _
.Desc = obj.Field(Of String)("Y")} Distinct..Union(New With {Key .Cod = "-1", .Desc = "All"}).ToList
但它不起作用:
转换匿名类型(第1147行)'时可能会发生运行时错误。 to' System.Collections.Generic.IEnumerable(匿名类型)'。
有什么想法吗? 谢谢。
答案 0 :(得分:3)
由于您已选择List
,因此可以使用List.Add
。但是您已将其声明为IEnumerable
,但没有Add
(或Remove
)。所以只需使用没有类型的Dim
,编译器就会推断出正确的(List)类型:
Dim objFilter = From obj In m_DataSet.Tables(0)
Select New With {
Key .Cod = obj.Field(Of String)("X"),
.Desc = obj.Field(Of String)("Y")}
Distinct.ToList()
objFilter.Add(New With {Key .Cod = "-1", .Desc = "All"})
' or at the beginning:
objFilter.Insert(0, New With {Key .Cod = "-1", .Desc = "All"})