2009-04-02 16 views
6

Próbuję nauczyć LINQ do SQL i dowiedziałem się o funkcji LoadWith. Wszystkie znalezione przykłady załadują wszystkie rekordy z tabeli określonej w funkcji LoadWith np.LINQ do SQL chętny ładowanie z warunkami

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

Co chciałbym wiedzieć, czy w tym przykładzie można załadować tylko ostatni wpis na blogu?

Próbowałem

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

Ale nie lubię tego składnię.

Odpowiedz

7

Możesz to zrobić za pomocą AssociateWith. To będzie działać:

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

Ponadto, jeśli będzie ładowania informacji do osobnej klasy lub mogą używać anonimowej można po prostu zrobić kwerendę jako:

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

Świetne, czego szukam :) Pozdrawiam – Alex

1

Jeśli chcesz tylko ostatni post, to podejrzewam, że po prostu wysyłanie zapytań do tego postu będzie bardziej efektywne przy użyciu leniwego ładowania niż wymuszanie ładowania "chętnego" w ten sposób.

+0

Oznacza to, że co 2 połączenia z bazą danych . Idealnie powinieneś być w stanie zrobić to w jednym. – Alex