2009-10-02 14 views
29

Considerate questa espressione LINQ scritto utilizzando la notazione delle query:LINQ: la notazione del punto equivalente per JOIN

List<Person> pr = (from p in db.Persons 
        join e in db.PersonExceptions 
        on p.ID equals e.PersonID 
        where e.CreatedOn >= fromDate 
        orderby e.CreatedOn descending 
        select p) 
        .ToList(); 

Domanda: come è possibile scrivere questa espressione LINQ usando la notazione punto?

risposta

60

Ti piace questa:

List<Person> pr = db.Persons 
        .Join(db.PersonExceptions, 
          p => p.ID, 
          e => e.PersonID, 
          (p, e) => new { p, e }) 
        .Where(z => z.e.CreatedOn >= fromDate) 
        .OrderByDescending(z => z.e.CreatedOn) 
        .Select(z => z.p) 
        .ToList(); 

nota come un nuovo tipo anonimo viene introdotto per trasportare sia i bit p e e avanti. Nella specifica, gli operatori di query che utilizzano questo identificativo identificativi trasparenti indicano il comportamento.

+7

E quando Jon Skeet non è immediatamente disponibile, è possibile utilizzare Resharper per ottenere la stessa risposta. – ScottS

+6

Per i dettagli su quando sarebbe, consultare http://meta.stackexchange.com/questions/555/why-does-jon-skeet-never-sleep/566#566 - oh, e C# in Depth va in tutti anche questo, ovviamente. È come avere una versione in miniatura di me nella tua libreria;) –

+0

Grazie Jon. Leggendo il tuo libro proprio questa settimana. Grazie mille! Probabilmente mi limiterò a interrogare la notazione in casi come questi. –

Problemi correlati