2010-03-22 18 views
6

È possibile limitare il numero di entità associate caricate con entusiasmo in Include?Caricamento selettivo eager in Entity Framework

ad es. Ho enti autore e libro con una relazione molti-a-uno Vorrei caricare tutti gli autori e il loro ultimo libro

Grazie.

risposta

0

Sì, è possibile. Lo farai attraverso due domande.

Per prima cosa seleziona i tuoi autori.

List<Authors> authors = context.Authors.ToList(); 

Secondo selezionare i tuoi libri.

List<Books> books= 
        ( from b in context.Books 
          group b by b.AuthorName into groupedByAuthor 
          let maxDate = groupedByAuthor.Max(c=>c.PublishDate) 
          ... 
        ).ToList 

Quando si fa questo EF compilerà il tuo libro per l'autore. Nota che il tuo riferimento non sarà "caricato" ma il tuo 1 libro sarà lì.

Provalo ... la gioiosa magia di EF.

0

lo farei in questo modo:

var list = (from a in Authors.Include("Books") 
      join b in books.OrderByDesc(b => b.PublishedDate).Take(1) 
       on a.Id equals b.AuthorId into bo 
      select new { Author = a, Books = b }).ToList(); 

List<Author> authors = list.Select(o => o.Author); 

il cui autore è il tuo nome dell'entità e libri nella vostra proprietà di navigazione in Autore. avrai ancora un'EntityCollection per i libri, ma dovrebbe contenere solo 1 elemento.

+0

Non credo il .include ("Libri") è necessaria qui. Qualsiasi criterio condizionale (come un Take o anche il join è di per sé) dice a EF che ci sono alcune condizioni lì e che non dovrebbe includere tutto in modo che .Include venga eliminato. Almeno è così che lo capisco e ho giocato con quella sintassi parecchio. –

3

Non è possibile farlo utilizzando la sintassi .Include ma è possibile farlo utilizzando la proiezione.

var list = (from a in data.Authors 
      select new 
      { 
       Author = a, 
       Books = (from b in a.Books select b).Take(1) 
      }).ToList(); 

Quando si ottiene il risultato della materializzatore avrà utilizzato è rapporto di correzione e si sarà in grado di utilizzare list.Author.Books.

vedere la mia domanda a: LINQ to Entities (Entity Framework) Join and .Include conflict

Problemi correlati