uso - tutorial linq c# español
C#Linq where cláusula como variable (4)
Como ha señalado Richard, la Biblioteca de consultas dinámicas se puede usar para crear expresiones de filtros dinámicos. Cuando utilice Linq-To-Objects, asegúrese de convertir su IEnumerable<T>
a IQueryable<T>
primero. Aquí hay un ejemplo (incompleto):
using System.Linq.Dynamic;
namespace System.Linq.Dynamic
{
public class Example
{
// Assuming some value is assigned to below field somewhere...
private IEnumerable<Address> m_Addresses;
public void FilterByZipCode(string zipCode)
{
var x = m_Addresses.AsQueryable().Where("Zip == @0", zipCode);
dowork(x);
}
}
public class Address
{
public String Zip { get; set; }
// More Properties...
}
}
Estoy tratando de hacer una declaración LINQ donde la cláusula where proviene de una variable. Por ejemplo:
string whereClause = address.zip == 23456;
var x = from something in someList where whereClause;
es posible? Parece que no puedo hacer que funcione.
Gracias,
Actualización: mi cláusula where está predefinida y se basará en la entrada del usuario, así que no creo que esto funcione para mí. Básicamente, whereClause no está construido en el método, es un parámetro del método que hace el LINQ. No lo explique tan bien aquí hay un mejor ejemplo:
public void doLnq(string whereClause)
{
var x = from something in someList where whereClause;
dowork(x);
}
Actualización: solo para resumir algunas de las sugerencias y centralizar todo.
No puedo usar un interruptor para generar la cláusula where porque hay muchas posibilidades.
La publicación dinámica de linq que algunos de ustedes han publicado parece prometedora, pero estoy teniendo problemas para relacionar el ejemplo de linq a sql con mi problema de linq to objects.
y @sLaks después de mirar msdn http://msdn.microsoft.com/en-us/library/bb353734.aspx Tengo problemas para descifrar dónde quería usar AsQueryable
Gracias,
Esa es una función incorporada de LINQ. Solo usa el método de extensión Where.
Consulte Sintaxis de consulta de LINQ versus sintaxis de método (C #) para obtener más información.
Esta:
var query = from something in someList where whereClause;
es una abreviatura de:
var query = someList.Where(something => whereClause);
Suponiendo que someList
es un IEnumerable<Address>
, Where
refiere al método de extensión Enumerable.Where . Este método espera un Func<Address, bool>
que puede definir de la siguiente manera:
Func<Address, bool> whereClause = address => address.Zip == 23456;
var query = someList.Where(whereClause);
Necesita ensamblar una Expression<Func<T, bool>>
y pasarla al método de extensión Where()
:
Expression<Func<T, bool>> whereClause = a => a.zip == 23456;
var x = frSomeList.Where(whereClause);
EDIT : si usa LINQ to Objects, elimine la palabra Expression
para crear un delegado ordinario.