Usando LINQ a SQL y Reemplazar encadenado
-
03-07-2019 - |
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);
}
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.