2011/01/12

EF carga temprana con Include tipado usando lambdas

En EntityFramework tenemos la opción de indicar en una consulta que relaciones queremos cargar de forma temprana utilizando QueryObject.Include, el problema es que se hace con un literal.

var blogsWithPosts = context.Blogs
    .Include("Posts");
    .Where(b => b.Title.StartsWith("A"))
    .OrderBy(b => b.Title)

La idea es utilizar lamdas y obtener algo tipado (otro día ridiculizare los lenguajes no tipados), he aquí el código:



Al ser un método extensor seria necesario importar la clase Queries (O como queráis llamarla) donde se vaya a utilizar,
si colocáis esta clase en el namespace raíz de la lógica ne negocio (Acme.Coyote.BL) evitareis tener que importar la clase.

Quien sabe, en algún futuro lejano, cuando el equipo de EF tenga a bien incorporar esta funcionalidad, solo habrá que eliminar el método extensor.

Y ya podemos escribir:

var blogsWithPosts = context.Blogs
    .Include(b => b.Post);//
    .Where(b => b.Title.StartsWith("A"))
    .OrderBy(b => b.Title)

También funciona con varios niveles, por ejemplo Include(b => b.Post.Owner).

<brain:envidia>
Me he decidido a escribir mi primer post "chispas" tras hablar con Ruben, ver su blog y pensar, si el puede yo también :-).
</brain:envidia>

No hay comentarios: