2009-10-02 6 views
29

Considérez cette expression LINQ écrite en utilisant la notation de requête:LINQ: notation par points équivalent pour les 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(); 

Question: comment voulez-vous écrire cette expression LINQ en utilisant la notation par points?

Répondre

60

Comme ceci:

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(); 

Notez comment est introduit un nouveau type anonyme pour transporter à la fois les bits p et e avant. Dans la spécification, les opérateurs de requête qui utilisent ceci utilisent identificateurs transparents pour indiquer le comportement.

+7

Et lorsque Jon Skeet n'est pas immédiatement disponible, vous pouvez utiliser Resharper pour obtenir la même réponse. – ScottS

+6

Pour plus de détails sur ce qui se passerait, voir http://meta.stackexchange.com/questions/555/why-does-jon-skeet-never-sleep/566#566 - oh, et C# en profondeur va dans tous cela aussi, bien sûr. C'est comme avoir une version miniature de moi sur votre étagère;) –

+0

Merci Jon. Lire votre livre juste cette semaine. Merci beaucoup! Je vais probablement coller à la notation de requête dans des cas comme ceux-ci. –

Questions connexes