2009-04-02 13 views
6

Estoy tratando de aprender LINQ to SQL y he descubierto la función LoadWith. Todos los ejemplos que he encontrado cargarán todos los registros de la tabla que especifiques en la función LoadWith, p.LINQ to SQL carga ansiosa con las condiciones

var dlo = new DataLoadOptions(); 
dlo.LoadWith<Blog>(b => b.Posts); 
this.LoadOptions = dlo; 

Lo que me gustaría saber es si es posible cargar en este ejemplo solo la última publicación del blog?

He intentado

dlo.LoadWith<Blog>(b => b.Posts.Max()); 

Pero no le gusta que la sintaxis.

Respuesta

7

Puede hacerlo usando AssociateWith. Esto funcionará:

var options = new DataLoadOptions(); 
options.AssociateWith<Blog>(b => 
    b.Posts.Where(
     p1 => p1.SomeColumn == b.Posts.Max(p2 => p2. SomeColumn) 
    )); 

Además, si va a cargar la información en una clase separada o puede utilizar un anónimo que sólo puede hacer la consulta como:

var query = from b in context.Blogs 
      //probably some where you already have 
      select new MyBlogs // or with no type in case it is anonymous 
      { 
       AColumn = b.AColumn, //map any other values 
       LatestPost = b.Posts.Where(
         p1 => p1.SomeColumn == b.Posts.Max(p2 => p2. SomeColumn) 
       )).ToList() 
      } 
+0

Genial, justo lo que estoy buscando :) ¡Salud! – Alex

1

Si solo quieres la última publicación, entonces sospecho que simplemente consultar esa publicación específicamente será más eficiente usando la carga diferida que forzando una carga 'ansiosa' de esta manera.

+0

Eso significa hacer 2 llamadas de base de datos . Lo ideal sería que pudieras hacerlo en uno. – Alex