c# - example - Cómo crear LINQ Query desde una cadena?
list select c# example (6)
Gran parte de la razón por la que utiliza LINQ en primer lugar es para obtener consultas verificadas por el compilador, que detectarán los errores en tiempo de compilación. Esto frustrará ese propósito ya que la cadena se analizará en tiempo de ejecución.
Para sus necesidades, tiene dos opciones:
1) Hacer una consulta eSQL y ejecutarla en ObjectContext. Al usar esto, aún puede usar sus entidades como myEntities.Products y devolver una lista de productos.
2) Usar una consulta SQL normal, y usar el ObjectContext para llamarlo directamente hacia la base de datos subyacente.
Soy nuevo en LINQ y realmente necesito ayuda con algunos códigos.
Por el momento, tengo una cadena y var variables.
string temp = "from product in myEntities.Products where product.Name.Contains(_Name) select product";
var _Products = temp;
LvProducts.DataSource = _Products;
LvProducts.DataBind();
Básicamente, lo que quiero hacer es poder crear una consulta LINQ personalizada / complicada asignándola a una cadena de antemano. Después de terminar con la composición, asigno la cadena a la variable var. Sin embargo, esto obviamente no funcionará. Por lo tanto, ¿alguien puede ayudarme en esto?
Supongo que tendrás que usar la ejecución de código dinámico. Para más detalles, eche un vistazo a la publicación de Ricks en West-Wind .
Tal vez esto te puede ayudar http://nlinq.codeplex.com/
BR.
Tienes pocas opciones:
Use las bibliotecas Dynamic Linq para construir sus consultas sobre la marcha. El mejor lugar para comenzar es leyendo la entrada del blog de ScottGu . Sin embargo, no creo que estas bibliotecas admitan el método contains en su ejemplo. Aquí hay una publicación en el blog que explica cómo agregar este soporte.
Ejecutar directamente sentencias SQL . Consulte los documentos de MSDN para Linq a Sql o Linq a Entidades .
var _Products = myEntities.ExecuteStoreQuery<Product> (@"SELECT * FROM Products WHERE [Name] In (''Item1'', ''Item2'')");
Usa el comportamiento composable de Linq . Puede que esta no sea la solución más elegante, pero funciona muy bien si no tienes muchas opciones. Puede simplemente construir su consulta en varias partes.
var _Products = from product in myEntities.Products select product _Products = from product in _Products where product.Name.Contains(_Name) select product if FilterByPrice { _Products = from product in _Products where product.Price > 100 select product }
lo está pensando como un SQL dinámico en el que crea la instrucción como una cadena y la analiza como una instrucción SQL.
Dado que ya está en el código, ¿por qué no hacer las declaraciones allí mismo? Sería mucho más fácil si usa Lambda en lugar del linq tradicional. mis 2 centavos.
Puede hacer esto compilando este Linq dentro de c # usando el CodeDomProvider - Añadiendo funcionalidad de scripting a aplicaciones .NET - pero esto es bastante pesado como una solución. Si desea ver más acerca de cómo hacer esto, eche un vistazo a LinqPad - http://www.linqpad.net - ¡el autor lo invita a usar el descompilador para ver cómo funciona!
Si el requisito se reduce a las cláusulas simples donde una alternativa podría ser el uso de Dynamic Linq - consulte las publicaciones de Scott Gu y el código de muestra de Microsoft - http://weblogs.asp.net/scottgu/archive/2008/01/07 /dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx