Considere esta consulta de LINQ a SQL. Es intención es tener una cadena [] de términos de búsqueda y aplicar los términos de un montón de diferentes campos en la tabla de SQL:Excepción de LINQ a SQL: la secuencia local no se puede usar en la implementación LINQ to SQL de los operadores de consulta, excepto el operador Contiene
string[] searchTerms = new string[] {"hello","world","foo"};
List<Cust> = db.Custs.Where(c =>
searchTerms.Any(st => st.Equals(c.Email))
|| searchTerms.Any(st => st.Equals(c.FirstName))
|| searchTerms.Any(st => st.Equals(c.LastName))
|| searchTerms.Any(st => st.Equals(c.City))
|| searchTerms.Any(st => st.Equals(c.Postal))
|| searchTerms.Any(st => st.Equals(c.Phone))
|| searchTerms.Any(st => c.AddressLine1.Contains(st))
)
.ToList();
genera una excepción:
secuencia local no se puede utilizar en LINQ a SQL aplicación de operadores de consulta, excepto el operador Contiene()
pregunta: ¿por qué se eleva esta excepción, y cómo se puede rewritt la consulta es para evitar esta excepción?
@nitzmahone: gracias, se echa un vistazo a PredicateBuilder, parece ¡prometedor! –
Me preocuparía que la genialidad de 'PredicateBuilder' decepcionará en una implementación LinqToSql ya que algunas de las condiciones pueden no ser implementadas por el proveedor LinqToSql (el problema exacto que describe en su pregunta). –
+1 para '.Contains()' - generalmente es un buen reemplazo para las ecuaciones que no son compatibles con LinqToSql. Se recomienda precaución con 'PredicateBuilder' incluso siendo una opción. –