2010-05-14 5 views
5

Tengo la necesidad de construir una instrucción LINQ To SQL en tiempo de ejecución en función de la entrada de un usuario y parece que no puedo encontrar la manera de construir dinámicamente la cláusula WHERE.¿Qué tan dinámico puedo hacer mis declaraciones de LINQ to SQL?

no tengo ningún problema con lo siguiente:

string Filters = "<value>FOO</value>"; 
Where("FormattedMessage.Contains(@0)",Filters) 

Pero lo que realmente necesita es hacer que toda la cláusula WHERE dinámico. De esta forma puedo agregar varias condiciones en el tiempo de ejecución de esta manera (idea aproximada):

foreach (Filter filter in filterlist) 
      { 
       whereclause = whereclause + "&& formattedmessage.contains(filter)"; 
      } 

Respuesta

1

No sé qué tipo de datos se utiliza aquí, pero ¿por qué no tratar de usar consulta general?

var query = context.Messages 
    .AsQueryable(); 

foreach (Filter filter in filterlist) 
{ 
    query = query 
     .Where(m => m.Contains(filter)); 
} 

esto concatenará todas las condiciones usando AND (como en su pregunta).

5

Eche un vistazo a Dynamic Linq. Aquí hay un enlace para que pueda empezar:

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

+0

Erm, ¿quiso hacer de ese un enlace en lugar de un fragmento de código –

+0

Gracias Randy, he leído el artículo y me ha ayudado a llegar a donde estoy ahora. ¿Es posible que lo que tengo que hacer esté más allá del alcance del LINQ dinámico? – mcass20

+0

No, el LINQ dinámico puede hacer lo que quiera. –