如何操作值以用作参数

时间:2013-03-22 05:59:40

标签: c# filter

您好我有一个选择和文本类型输入。这些控件用于过滤数据网格中的列表。选择控件具有以下选项: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 = '' )

因此,例如,用户选择名字,然后键入“詹姆斯”。这可以理解为“给我的名字是'詹姆斯'的学生名单。”在我的控制器中,我认为唯一的方法是使用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相比,最简洁,最简洁的方法是什么?

2 个答案:

答案 0 :(得分: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,我使用了相关动作的字典,这种方法有其自身的缺点,例如,我们定义了处理switch / ifs部分的unnessary动作,它给人一种我们已经摆脱的感觉ifs / switch但是需要权衡内存需求,所以永远不要让简单易懂的东西复杂化。

所以我会说使用Ifs / Switch在你的情况下没有任何错误。

答案 1 :(得分:1)

您可以使用switch (C# Reference)语句查看。

  

switch语句是一个选择开关的控制语句   从候选人名单中执行的部分。