2011-09-02 172 views
4
Dim query = From o In myContainer.MyObjects Select o.MyStringProperty Distinct 

Dim myProperties As List(Of String) = query.ToList????? 'no way!!!' 

“查询”类型的IEnumerable(串)Linq查询列出VB.NET

我试图用query直接作为(infragistic)组合框的数据源,但它抛出我的NullReferenceException,所以我决定将它转换为字符串列表,以成为更“经典”的数据源。

Dim values As List(Of String) = query.AsQueryable().ToList() 

不起作用或者:值类型的 'System.Collections.Generic.List(OF System.Linq.IQueryable(字符串))' 不能被转换为“System.Collections.Generic.List(字符串)“。

+0

确保您有Option Strict On。如果您有Option Strict Off,则您的查询可能会推断出结果为IEnumerable(Of Object)而不是字符串,并且ToList没有正确转换它。否则,删除As List(Of String)并查看什么类型的推论返回。我怀疑你的隐式转换发生在编译器隐藏的某处。 –

回答

-1

最后,解决了良好的老方法:)

Dim values As New List(Of String) 

    For Each item In query 
    values.Add(item) 
    Next item 
+6

你的问题是如何做Linq的东西。你不应该错误地回答你自己的问题,然后接受它。 – Yatrix

+0

@Yatrix别担心!赞成票将揭示结果:-) –

+0

@FaizanMubasher当然,但事实仍然存在,这是错误的答案。 – Yatrix

12

您的错误消息表明query实际上是一个List(Of T)内部包含集合。

如果是这样的话,你可以使用SelectMany扁平化集合:

Dim values As List(Of String) = query.SelectMany(Function(m) m).ToList() 

编辑:鉴于您的编辑,以及评论,下面应该很好地工作:

Dim values As List(Of String) = query.ToList() 
+0

似乎不工作:*类型'System.Collections.Generic.List(Of System.Collections.Generic.IEnumerable(Of Char))'的值不能转换为'System.Collections.Generic.List(Of String)' 。* – serhio

+0

@serhio:mmm - 如果是这种情况,那么'.ToList()'应该可以正常工作。 –

+0

编辑我的答案 - 这与您在“古老的方法”中所做的相同...... –

1

也许你应该尝试指定查询变量的类型?

Dim query = From o In myContainer.MyObjects Select o.MyStringProperty Distinct 

应该成为

Dim query As IEnumerable(Of String) = From o In myContainer.MyObjects Select o.MyStringProperty Distinct 

如果IEnumerable的(串)的类型不能在查询中使用,那么你需要拼合里德·科普塞说列表。