 <p>If you want to assign the result to a <code>List(Of String)</code> variable then you need a <code>List(Of String)</code> object. You can all <code>ToList</code> on any enumerable list to create a <code>List(Of T)</code>.</p> <p>Also, your <code>AsEnumerable</code> call is pointless because <code>Cast(Of T)</code> already returns an <code>IEnumerable(Of T)</code>.</p> <p>Finally, declaring a variable on one line and then setting its value is so unnecessarily verbose. It's not wrong but it is pointless. In your case, not only are you declaring a variable but you're also creating an object that you never use. Don't create a <code>New</code> object if you don;t actually want a new object, which you don;t because you're getting an object on the very next line.</p> <pre><code>Dim list As List(Of String) = chkparameter.Items. Cast(Of ListItem). Where(Function(x) x.Selected). Select(Function(x) x.Value). ToList() </code></pre> <p>There's also no need to declare the type of the variable because it will be inferred from the initialising expression, i.e. <code>ToList</code> returns a <code>List(Of String)</code> so the type of the variable can be inferred from that. Not everyone likes to use type inference where it's not completely obvious though, so I'll let you off that one. I'd tend to do this though:</p> <pre><code>Dim list = chkparameter.Items. Cast(Of ListItem). Where(Function(x) x.Selected). Select(Function(x) x.Value). ToList() </code></pre> <p>By the way, notice how much easier the code is to read with some sensible formatting? If you're going to use chained function syntax like that, it's a very good idea to put each function on a different line once you get more than two or three.</p>