2009-04-02 7 views
6

J'essaie d'apprendre LINQ à SQL et j'ai découvert la fonction LoadWith. Tous les exemples que j'ai trouvés chargeront tous les enregistrements de la table que vous spécifiez dans la fonction LoadWith, par ex.LINQ to SQL désireux de chargement avec des conditions

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

Ce que je voudrais savoir est s'il est possible de charger dans cet exemple que le dernier billet de blog?

J'ai essayé

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

Mais il n'aime pas cette syntaxe.

Répondre

7

Vous pouvez le faire en utilisant AssociateWith. Cela fonctionne:

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

De plus, si vous chargeront les informations dans une classe séparée ou peut en utiliser un anonyme, vous pouvez simplement faire la requête comme:

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

Super juste ce que je cherche :) – Alex

1

Si vous ne voulez que le dernier message, je pense que le simple fait d'interroger spécifiquement ce message sera plus efficace si vous utilisez un chargement paresseux que de forcer une charge "ardente" de cette façon.

+0

Cela signifie faire 2 appels de base de données . Idéalement, vous devriez être capable de le faire en un. – Alex