【解決方法】10 コンボボックス VB.NET をフィルター処理するときに IF ELSE が多すぎないようにする


やあ、
現在、多くのコンボボックスでデータをフィルタリングするために IF ELSE メソッドを使用しています。
私がしたことは次のようなものです:

VB
IF cboName.text = "" AND cboAge.text = "" THEN
     select name,age from tbUser
ELSEIF cboName.text <> "" AND cboAge.text = "" THEN
     select name,age from tbUser WHERE name = '" & cboName.text & "'

ELSEIF cboName.text = "" AND cboAge.text <> "" THEN
     select name,age from tbUser WHERE age = '" & cboAge.text & "'
ELSEIF cboName.text <> "" AND cboAge.text <> "" THEN
     select name,age from tbUser WHERE name = '" & cboName.text & "' AND age = '" & cboAge.text & "'
END IF

コンボボックスが10個ある場合、このプロセスを実行するためだけに何百行もあるでしょう。

このプロセスを効果的に行うための提案はありますか?
ありがとうございました。

私が試したこと:

IF cboName.text = "" AND cboAge.text = "" THEN
     select name,age from tbUser
ELSEIF cboName.text <> "" AND cboAge.text = "" THEN
     select name,age from tbUser WHERE name = '" & cboName.text & "'

ELSEIF cboName.text = "" AND cboAge.text <> "" THEN
     select name,age from tbUser WHERE age = '" & cboAge.text & "'
ELSEIF cboName.text <> "" AND cboAge.text <> "" THEN
     select name,age from tbUser WHERE name = '" & cboName.text & "' AND age = '" & cboAge.text & "'

解決策 1

クエリを作成しているため、ユーザーが利用できるすべての選択肢を確認する必要があります。

できることは、クエリを作成することです。
Select は常に同じです:

VB
Dim QueryString = new StringBuilder()
Dim WhereBuilder = new List(Of String)()

QueryString.Append("select name, age from tbUser")

次に、各テストを実行します。

VB
If Not String.IsNullOrWhitespace(cboName.Text) Then
    WhereBuilder.Add("name = '" + cboName.Text + "'")
End If

If Not String.IsNullOrWhitespace(cboAge.Text) Then
    WhereBuilder.Add("age = '" + cboAge.Text + "'")
End If

これで、クエリを作成する準備が整いました。

VB
If WhereBuilder.Count > 0 Then
    QueryString.Append(" where ")
    QueryString.Append(String.Join(" and ", WhereBuilder)
End If

dim query = QueryString.ToString()

注:コードはテストされていない回答に記述されているため、クリーンアップが必要になる場合があります。

コメント

タイトルとURLをコピーしました