2009-10-02 16 views
29

Considere esta expresión LINQ escrito usando el sistema de consulta:LINQ: equivalente notación de puntos para 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(); 

Pregunta: ¿Cómo le escribir esta expresión LINQ usando la notación de puntos?

Respuesta

60

De esta manera:

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 cómo se introduce un nuevo tipo anónimo para realizar tanto las p y e los bits hacia adelante. En la especificación, los operadores de consulta que hacen esto usan identificadores transparentes para indicar el comportamiento.

+7

Y cuando Jon Skeet no está disponible de inmediato, puede usar Resharper para obtener la misma respuesta. – ScottS

+6

Para obtener detalles sobre cuándo sería eso, consulte http://meta.stackexchange.com/questions/555/why-does-jon-skeet-never-sleep/566#566 - ah, y C# en profundidad va a todos esto también, por supuesto. Es como tener una versión en miniatura de mí en su estantería;) –

+0

Gracias Jon. Leyendo tu libro esta semana. ¡Muchas gracias! Es probable que me limite a la notación de consulta en casos como estos. –