'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)'.
Solution 1:[1]
Finally, solved with good old method : )
Dim values As New List(Of String)
For Each item In query
values.Add(item)
Next item
Solution 2:[2]
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()
Solution 3:[3]
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.
Solution 4:[4]
This works for me:
Dim drs As List(Of ProjectTask) = (From pt In projectTasks Where pt.TaskEngineerId <> 1).ToList()
Putting brackets around the query did the trick.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | serhio |
| Solution 2 | |
| Solution 3 | avanek |
| Solution 4 | GrahamJ |
