Ti consiglio di iniziare fin da subito a studiarti le query LINQ con le lemda expression, sono estremamente versatili, più veloci ed intuitive.
In VB la sintassi è un po' più articolata rispetto al C# dove è veramente molto semplice, comunque una volta che ci ha preso la mano ne vedi la differenza.

Altro piccolo consiglio, se posso, fatti una serie di service con i metodi più utilizzati nella procedura e richiama sempre quelli, in modo che il codice lo centralizzi, li dividi per macro aree tipo questa dei comuni potrebbe stare in una zona relativa alle anagrafiche e quindi con tutto quello che serve per lavorarci.

Tornando all'esempio sopra una cosa del genere potresti farla ad esempio così

codice:
public function GetComuni(optional byval regioneID as integer? = null) as List(Of Comuni)

  Dim result = _dbContext.set(Comuni).ToList()

  if regioneID IsNot Nothing AndAlso regioneID > 0 Then
    result = result.Where(Function(r) r.regioneID == regioneID).ToList()
  End If

  return result
End Function
ps.: io al 95% lavoro in C#, quindi se ho scritto qualche castroneria a livello di sintassi perdonami, ma concettualmente questo è quello che intendevo