C# 如何操作用作参数的值

C# 如何操作用作参数的值,c#,filter,C#,Filter,嗨,我有一个选择和一个文本类型输入。这些控件用于筛选数据网格中的列表。选择控件具有以下选项:姓氏、中间名、名、性别、城市和学生ID。然后我被问到: SELECT * FROM Student WHERE ( LastName LIKE '%' + @LastName + '%' OR @LastName = '' ) AND ( MiddleName LIKE '%' + @MiddleName + '%' OR @MiddleName = '' ) AND ( FirstName LIKE '

嗨,我有一个选择和一个文本类型输入。这些控件用于筛选数据网格中的列表。选择控件具有以下选项:姓氏、中间名、名、性别、城市和学生ID。然后我被问到:

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 = '' )
例如,用户选择名字,然后输入“James”。这可以理解为“给我一份名为‘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更好、最干净、最简单的方法?

您可以看看使用语句

switch语句是选择开关的控制语句 节从候选列表中执行

您可以使用语句查看

switch语句是选择开关的控制语句 节从候选列表中执行


您需要在某个地方决定它,或者在您的控制器中,或者您可以将它委托给另一个类,但是将它委托给另一个助手类将不需要承担责任。所以我想说,你可能会想到下面的设计

 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);
    }
 }
请参阅,为了避免ifs和开关,我将字典与相关操作一起使用,这种方法有其自身的缺点,例如,我们定义了不必要的操作来处理开关/ifs的部分,这给人一种感觉,我们已经摆脱了ifs/switch,但在内存需求方面有了折衷,所以永远不会使简单可以处理的事情复杂化


所以我想说,在你的情况下,使用Ifs/开关没有什么错

您需要在某个地方做出决定,要么在您的控制器中,要么您可以将其委托给另一个类,但将其委托给另一个助手类将不需要承担责任。所以我想说,你可能会想到下面的设计

 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);
    }
 }
请参阅,为了避免ifs和开关,我将字典与相关操作一起使用,这种方法有其自身的缺点,例如,我们定义了不必要的操作来处理开关/ifs的部分,这给人一种感觉,我们已经摆脱了ifs/switch,但在内存需求方面有了折衷,所以永远不会使简单可以处理的事情复杂化


所以我想说,在你的情况下,使用Ifs/开关没有什么错

+1。。。。或者跳过
开关
,直接使用
字典
映射的
下拉列表
来委托设置您想要的值。+1。。。。或者跳过
开关
,直接使用
字典
映射的
下拉列表
来委托设置您想要的值。@AlexeiLevenkov::),如果我在键入时看到您的评论,然后在急着点击Post-Answer之前,我不想发表这个答案,但我指出了我对ifs和switch的误解,这在OP的问题等情况下非常有意义。@AlexeiLevenkov::),如果我在打字时看到你的评论,然后在点击Post answer之前,我不想发表这个答案,但我指出了对ifs和switch的误解,这在OP的问题这样的情况下是非常有意义的。