2009-04-02 20 views
6

Ich versuche, LINQ to SQL zu lernen, und ich habe über die LoadWith-Funktion erfahren. Alle Beispiele, die ich gefunden habe, laden alle Datensätze aus der Tabelle, die Sie in der LoadWith-Funktion angeben, z.LINQ to SQL Eager Laden mit Bedingungen

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

Was würde ich gerne wissen, wenn es möglich ist, in diesem Beispiel nur den letzten Blogeintrag zu laden?

Ich habe

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

Aber es ist nicht wie diese Syntax.

Antwort

7

Sie können es mit AssociateWith tun. Dies funktioniert:

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

Auch, wenn Sie die Informationen in einer separaten Klasse geladen wird oder ein anonymes ein verwenden, können Sie die Abfrage als nur tun können:

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

Großartig, was ich suche :) Prost – Alex

1

Wenn Sie nur den letzten Beitrag wollen, dann vermute ich, dass die einfache Abfrage für diesen Beitrag ist effizienter mit Lazy Loading als zwingen eine "eifrige" Last auf diese Weise.

+0

Das bedeutet, dass 2-Datenbank Anrufe . Im Idealfall sollten Sie in der Lage sein, es in einem zu tun. – Alex