Usando comodines con un LinqDataSource

Actualmente tengo un LinqDataSource en una página ASP.NET que se utiliza como fuente de datos para un FormView. Necesito alterar dinámicamente elwhere Cláusula basada en parámetros que se pasan a través de la cadena de consulta. Estoy trabajando bien, excepto que quiero que el usuario final pueda usar comodines:

UNA "?" Se utiliza para representar un solo carácter.Un "*" representa varios caracteres.

Parece bastante fácil, todo lo que necesito es usar el operador LIKE y reemplazar? con_ (coincide con un solo carácter), y* con% (coincide con todos los personajes).

A continuación se muestra el método que realiza el juego de pies de lujo (que se llama enPageLoad), y funciona muy bien, excepto que se están escapando mis comodines.

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;
    }
}

A continuación se muestra la consulta que se genera a partir de esta cadena de consulta:.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

Como puede ver por la asignación de parámetros, mis comodines se escapan con el carácter de tilde:

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

Mi pregunta es, ¿es posible detener el_ y% personajes de ser escapado?

Respuestas a la pregunta(2)

Su respuesta a la pregunta