简体   繁体   中英

Linq query to list VB.NET

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

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

"query" type is IEnumerable(Of String)

I tried to use the query directly as a DataSource of a (infragistic) combobox, but it throws me NullReferenceException, so I decided to convert it to a listof strings, to be a more "classical" datasource.

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

does not work either: Value of type 'System.Collections.Generic.List(Of System.Linq.IQueryable(Of String))' cannot be converted to 'System.Collections.Generic.List(Of String)'.

Your error message suggests the query is actually a List(Of T) containing a collection internally.

If this is the case, you can use SelectMany to flatten the collection:

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

Edit: Given your edit, as well as the comment, the following should work fine:

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

Perhaps you should try to specify the type on the query variable?

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

Should become

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

If the type of IEnumerable(Of String) can't be used on query, then you need to flatten the list as Reed Copsey said.

Finally, solved with good old method : )

  Dim values As New List(Of String)

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM