Pregunta

Necesito reemplazar varias cadenas con otras en una consulta

from p in dx.Table
where p.Field.Replace("A", "a").Replace("B", "b").ToLower() = SomeVar
select p

Lo que proporciona una declaración SQL única y agradable con los comandos relevantes de REPLACE () sql.

Todo bien :)

Necesito hacer esto en algunas consultas relacionadas con la aplicación ... Así que estoy buscando ayuda a este respecto; que funcionará igual que arriba como un solo hit / comando SQL en el servidor

Parece que al mirar alrededor no puedo usar RegEx ya que no hay SQL eq

Al ser un novato de LINQ, ¿hay una buena manera de hacer esto?

por ejemplo, es posible obtenerlo como un resultado de IQueryable " var " decir y pasar eso a una función para agregar .Replace () 's y pasar atrás? ¿Puedo obtener un ejemplo rápido de cómo hacerlo?

EDITAR: ¡Esto parece funcionar! ¿Parece que sería un problema?

var data = from p in dx.Videos select p;
data = AddReplacements(data, checkMediaItem);
theitem = data.FirstOrDefault();

...

public IQueryable<Video> AddReplacements(IQueryable<Video> DataSet, string checkMediaItem)
{
    return DataSet.Where(p =>
            p.Title.Replace(" ", "-").Replace("&", "-").Replace("?", "-") == checkMediaItem);
}
¿Fue útil?

Solución

¿No sería más eficaz revertir lo que está tratando de hacer aquí, es decir, reformatear la cadena que está verificando en lugar de reformatear los datos en la base de datos?

public IQueryable<Video> AddReplacements(IQueryable<Video> DataSet, string checkMediaItem)
{
    var str = checkMediaItem.Replace("-", "?").Replace("&", "-").Replace("-", " "));
    return DataSet.Where(p => p.Title == str);
}

Por lo tanto, ahora está comparando el campo en la base de datos con un valor establecido, en lugar de escanear la tabla y transformar los datos en cada fila y compararlos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top