2009-04-02 11 views
6

Sto cercando di imparare LINQ su SQL e ho scoperto la funzione LoadWith. Tutti gli esempi che ho trovato caricheranno tutti i record dalla tabella specificata nella funzione LoadWith, ad es.LINQ to SQL carico di lavoro con condizioni

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

Quello che mi piacerebbe sapere è se è possibile caricare in questo esempio solo l'ultimo post del blog?

Ho provato

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

Ma non piace che la sintassi.

risposta

7

È possibile farlo utilizzando AssociateWith. Ciò funzionerà:

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

Inoltre, se si prevede di caricare le informazioni in una classe separata oppure può utilizzare una anonima si può solo fare la query come:

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

Fantastico proprio quello che sto cercando :) Ciao – Alex

1

Se si desidera solo l'ultimo post, ho il sospetto che semplicemente interrogando per quel post in modo specifico sarà più efficiente utilizzando il caricamento lazy di forzare un carico "desideroso" in questo modo.

+0

Ciò significa fare 2 chiamate al database . Idealmente dovresti essere in grado di farlo in uno. – Alex