23-junio-2013
admin

LINQ to Objects

Gracias a “LINQ to Objects” podemos hacer consultas LINQ directamente sobre cualquier colección IEnumerable o IEnumerable sin utilizar ninguna API o proveedor LINQ intermedio, como LINQ to SQL o LINQ to XML. Más Info

Un ejemplo de uso podría ser el que muestro a continuación:

  IEnumerable< Persona > persona = from p in personas.AsEnumerable()
                     where p.Name.StartsWith("S")
                     orderby p.Name
                     select p; 

Se realiza una consulta sobre una lista de personas que me devuelve todas aquellas personas cuyo nombre comienza por la letra S. Además, realiza una ordenación por nombre.
Persona: sería una clase con p.e. las propiedades Name, Apellidos, Edad.
List: podría ser la lista personas sobre la que hacemos la consulta.

Además, si se quiere se podría hacer algo mas amigable la consulta. Para por ejemplo no tener que escribir consultas muy grandes.

  Func< Persona, bool > func = delegate(Persona person){
         return person.Name.StartsWith("S");
  }
  IEnumerable< Persona > persona = (from p in personas.AsEnumerable() select p)
         .Where(func)
         .OrderBy< Persona, string >(per => per.Name); 

Aquí se realiza exactamente lo mismo que antes, con la diferencia de que he creado una función para evaluar las condiciones del Where (está función debe tener como mínimo un objeto de entrada y debe devolver bool).

En el ejemplo he utilizado un Where sobre una IEnumerable pero también se podría hacer lo mismo para IQueryable, usando Exressions en este caso.

public static IQueryable< TSource > Where< TSource >(
    this IQueryable< TSource > source,
    Expression< Func < TSource, bool > > predicate
)

public static IEnumerable< TSource > Where< TSource >(
    this IEnumerable< TSource > source,
    Func< TSource, bool > predicate
)

Comentarios cerrados.

Categorias

Linkedin