您好我有一个选择和文本类型输入。这些控件用于过滤数据网格中的列表。选择控件具有以下选项: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相比,最简洁,最简洁的方法是什么?
答案 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语句是一个选择开关的控制语句 从候选人名单中执行的部分。