将项添加到使用Linq填充的IEnumerable(vb.net)

时间:2014-09-18 14:15:21

标签: vb.net linq

我试图从数据表中获取一些值以将它们用作过滤器。 我提取值,然后我填充组合框的数据源。

问题是,我想添加一个额外的项目,就像选项" 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(匿名类型)'。

有什么想法吗? 谢谢。

1 个答案:

答案 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"})