Public Class Querybuilder Public Shared Function Build(config As ConfigValues, db As DB) Dim suffixQuery As String = "AND (DB=DE OR DB=EM OR DB=IR)" Dim mainQuery As String Dim baseQuery As String Dim companies As List(Of String) ' searchvalues ist entweder eine SQL Abfrage oder eine Kommagetrennte Liste If config.query.ToUpper.StartsWith("SELECT") Then companies = GetLiveQueryResult(config.query, db) Else companies = New List(Of String)(config.query.Split(",")) End If mainQuery = BuildMainQuery(companies) baseQuery = String.Format("({0}) {1}", mainQuery, suffixQuery) Return baseQuery End Function Public Shared Function BuildMainQuery(companies As List(Of String)) As String Dim query As String = "" For Each company As String In companies Dim querypart As String = String.Format("(INH=""{0}"" OR ANM=""{0}"")", company.Trim()) query &= querypart ' Bei alles bis auf das letzte Unternehmen einen OR Operator einfügen If (companies.IndexOf(company) + 1) < companies.Count Then query &= " OR " End If Next Return query End Function Public Shared Function GetLiveQueryResult(query As String, db As DB) As List(Of String) Dim result As New List(Of String) Dim SQL As String = query Dim DT As DataTable = db.QueryTable(SQL) If DT.Rows.Count = 0 Then Throw New Exception("SQL Abfrage lieferte ein leeres Ergebnis zurück: " & query) End If For Each row As DataRow In DT.Rows Dim item As String = CStr(row.Item(0)).Trim() result.Add(row.Item(0)) Next Return result End Function End Class