2009-11-21 20 views
9

Necesito crear una consulta que compruebe si un campo (cadena) contiene una o más palabras suministradas en tiempo de ejecución.Operador de Linq a Sql 'Where Or'

Básicamente, tengo que poder hacer una pregunta WhereOr. Parece que debería ser un problema común al tratar con LinqToSql.

Encontré el siguiente reference pero no puedo entenderlo, y no tengo idea de cómo usarlo en mi proyecto.

he intentado el siguiente bucle:

 var query = from d in context.Domains select d; 
     for (int i = 0; i < words.Length; i++) 
     { 
      query = query.Where(d => d.Name.Contains(words[i])); 
     } 

pero esto construye una consulta SQL con DONDE Y cláusulas no dónde o

+0

encontró un recurso interesante: http://www.albahari.com/nutshell/predicatebuilder.aspx –

+0

lookd como usted ha encontrado usted mismo ^^ empecé escribiendo antes de publicar ese comentario. Espero poder ayudar. –

Respuesta

17

utilizo PredicateBuilder para tales cosas.

La construcción de predicados se parece a esto:

 var query = from d in context.Domains select d; 
    var predicate = PredicateBuilder<Domains>.False(); 

    for (int i = 0; i < words.Length; i++) 
     { 
      predicate = predicate.Or(d => d.Name.Contains(words[i])); 
     } 
    query = query.Where(predicate); 
+0

+1. Sí, esto es lo que también recomendaría – RichardOD

+0

Me pregunto por qué esto no fue respaldado en LinqToSql –