Использование подстановочных знаков с LinqDataSource

В настоящее время у меня есть LinqDataSource на странице ASP.NET, которая используется в качестве источника данных для FormView. Мне нужно динамически изменитьwhere предложение на основе параметров, которые передаются через строку запроса. У меня это работает нормально, за исключением того, что я хочу, чтобы конечный пользователь мог использовать подстановочные знаки:

A "?" is used to represent a single character. A "*" represents multiple characters.

Кажется, достаточно просто, все, что мне нужно сделать, использовать оператор LIKE и заменить? с_ (соответствует одному символу) и* с% (соответствовать всем персонажам).

Ниже приведен метод, который делает причудливую работу ног (которая называетсяPageLoad), и это прекрасно работает, за исключением того, что мои символы подстановки экранированы.

private void ApplyFilter(ref LinqDataSource lds)
{
    if (Request.QueryString.Keys.Count > 0)
    {
        string where = "";
        int counter = 0;

        foreach (string key in Request.QueryString.Keys)
        {
            if (Request.QueryString[key] != "")
            {
                if (counter == 0)
                {
                    where += key + ".Contains(@" + key + ")";
                }
                else
                {
                    where += " AND " + key + ".Contains(@" + key + ")";
                }

                lds.WhereParameters.Add(key, Request.QueryString[key].Replace("?", "_").Replace("*", "%"));
                counter++;
            }
        }

        if (where != "")
            lds.Where = where;
    }
}

Ниже приведен запрос, сгенерированный из этой строки запроса:.aspx?LOOP_DESCRIPTION=*&LOOP=*&AREA=01

exec sp_executesql N'SELECT [t1].[AREA], [t1].[LOOP], [t1].[LOOP DESCRIPTION] AS [LOOP_DESCRIPTION]
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY [t0].[AREA], [t0].[LOOP], [t0].[LOOP DESCRIPTION]) AS [ROW_NUMBER], [t0].[AREA], [t0].[LOOP], [t0].[LOOP DESCRIPTION]
    FROM [dbo].[INSTRUMENT LOOP DESCRIPTION] AS [t0]
    WHERE ([t0].[LOOP DESCRIPTION] LIKE @p0 ESCAPE ''~'') AND ([t0].[LOOP] LIKE @p1 ESCAPE ''~'') AND ([t0].[AREA] LIKE @p2)
    ) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p3 + 1 AND @p3 + @p4
ORDER BY [t1].[ROW_NUMBER]',N'@p0 nvarchar(4000),@p1 nvarchar(4000),@p2 nvarchar(4000),@p3 int,@p4 int',@p0=N'%~%%',@p1=N'%~%%',@p2=N'%01%',@p3=0,@p4=1

Как вы можете видеть при назначении параметров, мои символы подстановки экранируются символом тильды:

@p0=N'%~%%',@p1=N'%~%%',@p2=N'%01%'

У меня вопрос, можно ли остановить_ а также% символы от побега?

Ответы на вопрос(2)

Ваш ответ на вопрос