I was thinking could the LINQ approach, be applied to getting inputs from the user?

In VB11 (vs2012) iterators where added to the VB.Net, so lets utilize them.

Module Public Module ConsoleEnumerables
Public Iterator Function GeIntegers(Optional allowNegatives As Boolean = False) As IEnumerable(Of Integer)
While True
Yield ReadInteger(allowNegatives)
End While
End Function

So that's all there is to it. Get User input and then yield it.

Of course all of the heavy lifting is handled in the ReadInteger Function, it handles the keypresses to filter input to specific keys. The delete key being rather tricky.

The following extension method is used to ensure that result of keypress will result in a valid output.

<Extension>
Public Function IsValid(Of T)(ByRef current As T, nextstate As T, fn As Func(Of T, Boolean)) As Boolean
Dim v = fn(nextstate)
If v Then current = nextstate
Return True
End Function
End Module

It is used to ensure the value is valid and within the bounds of an Integer.