0

こんにちは、選択とテキスト型の入力があります。これらのコントロールは、データグリッドのリストをフィルタリングするために使用されます。選択コントロールには、LastName、MiddleName、FirstName、Gender、City、および StudentID のオプションがあります。それから私はこのクエリを与えられました:

SELECT * FROM Student
WHERE ( LastName LIKE '%' + @LastName + '%' OR @LastName = '' )
AND ( MiddleName LIKE '%' + @MiddleName + '%' OR @MiddleName = '' )
AND ( FirstName LIKE '%' + @FirstName + '%' OR @FirstName = '' )
AND ( Gender LIKE '%' + @Gender + '%' OR @Gender = '' )
AND ( City LIKE '%' + @City + '%' OR @City = '' )
AND ( StudentID LIKE '%' + @StudentID + '%' OR @StudentID = '' )

たとえば、ユーザーは First Name を選択し、「James」と入力します。これは、「名前が「ジェームズ」である生徒のリストを教えてください」と読むことができます。私のコントローラーでは、私が考えた唯一の方法は、If..Else If または Switch 条件を使用することです。次のようでした。

string lastName = String.Empty;
string middleName = String.Empty;
and so on..

if(dropdown == "Lastname")
{
lastName = textbox_value;
}
else if(dropdown == "Middlename")
{
middleName = textbox_value;
}
and so on..

次に、値をパラメータとしてSQLクエリに渡すメソッドがあります。

resultList = GetRecord(lastName, middleName, firstName, gender, city, studentID);

私の質問は、If..Else と Switch を使用するよりも、最もクリーンでシンプルな方法は何ですか?

4

2 に答える 2

2

コントローラーのどこかで決定する必要があります。または、これを別のクラスに委譲することもできますが、別のヘルパー クラスに委譲すると責任を負います。だから私は言うだろう、あなたは以下のデザインを考えるかもしれない

 public class ParameterSelector
{


    private Dictionary<string,Action> _dictActionMap = new Dictionary<string, Action>();
    public ParameterSelector()
    {
        PopulateDictionaryWithActions();
    }

    private void PopulateDictionaryWithActions()
    {
        _dictActionMap.Add("LastName", () => lastName = txtBox_Value);
        _dictActionMap.Add("MiddleName", () => middleName = txtBox_Value);
    }
 }

と使い方

main()
{
  if(_dictActionMap.ContainsKey(dropdown))
      _dictActionMap[_dictActionMap]();
}

ifs と switch を避けるために参照してください。関連するアクションで辞書を使用しました。このアプローチには独自の欠点があります。ただし、メモリ要件とのトレードオフがあるため、単純に処理できるものを複雑にしないでください。

したがって、Ifs/ Switch を使用しても問題はありません。

于 2013-03-22T06:12:19.040 に答える
1

switch (C# リファレンス)ステートメントを使用して確認できます。

switch 文は、実行する switch セクションを候補リストから選択する制御文です。

于 2013-03-22T06:05:36.413 に答える