C# 字符串连接

C# String Concatenation

帮助我解决 C# 中的这个问题,我正在尝试优化我的 gridview 的搜索,这是我的代码,我希望用户能够在文本框中使用这种格式搜索值。 (名称,描述)例如。 Food, Ice Cream,然后它会过滤所有带有冰淇淋描述的食物。谢谢

((DataTable) gridTestCodes.DataSource).DefaultView.RowFilter = 
        string.Concat("name like '%{0}% + description + '%{0}%'", 
                      txtSearch.Text.Trim().Replace("'", "''"));

您正在使用 concat 代替 format。另外,你的查询是错误的。您使用的是 + 而不是 AND,第一个 '%{0}% 后缺少一个单引号,并且 description + '%{0}%' 没有意义。试试这个:

((DataTable)gridTestCodes.DataSource).DefaultView.RowFilter = 
    string.Format("name like '%{0}%' AND description like '%{0}%'", 
                  txtSearch.Text.Trim().Replace("'", "''"));

或者尝试先查询名称,然后在成功后添加描述(.Replace 也应该一起删除引号吗?):

((DataTable)gridTestCodes.DataSource).DefaultView.RowFilter = 
         string.Format("name like '%{0}%'", txtSearch.Text.Trim().Replace("'", string.empty));

编辑:

如果你想输入名称然后用逗号分隔的描述试试:

var name = txtSearch.Text.Split(',')[0].Trim().Replace("'", string.empty);
var description = txtSearch.Text.Split(',')[1].Trim().Replace("'", string.empty);

((DataTable) gridTestCodes.DataSource).DefaultView.RowFilter = 
        string.Format("name like '%{0}%' AND description like '%{1}%'", name, description);

请注意,如果输入字符串包含逗号,上述代码将抛出异常。所以你可能想为此添加一个检查。

看来您需要改用 string.Formatstring.Concat 只是连接字符串,不会格式化它们。

而且您的表达式语法似乎不正确。在您的第一个 {0} 之后您还需要一个单引号,并且您需要在您的条件之间使用 ANDOR

string.Format("name like '%{0}%' AND description like '%{0}%'", 
               txtSearch.Text.Trim().Replace("'", "''"));