LINQ to XML, cz. 3 - Zapytania - kontynuacja

Linq to Xml dopuszcza stosowanie zmiennych w zapytaniach. Załóżmy, że chcemy wybrać z naszego przykładowego dokumentu wszystkie elementy <wylot> i <przylot>, których data jest taka sama jak data ostatniego elementu <przylot>. Przykładowe zapytanie może wyglądać tak:

var elements = 
from el in xDoc.Elements("wycieczka").Elements("segment").Elements()
let dataPrzylotu =
(DateTime)xDoc.Descendants("przylot").Last().Attribute("data")
where ((DateTime)el.Attribute("data")).ToShortDateString() ==
dataPrzylotu.ToShortDateString()
select el;

W zapytaniu, data przylotu ostatniego segmentu jest zapisywana w zmiennej dataPrzylotu. Zmienna ta jest później używana w klauzuli where do porównania daty aktualnie przetwarzanego elementu. Linq daje też programiście możliwość tworzenia podzapytań (ang. subqueries). Oto przykładowe zapytanie zawierające podzapytanie:

var elements = from segmenty in xDoc.Descendants("segment")
         from przyloty in segmenty.Elements("przylot")
               select przyloty;

Mniej złożone dokumenty nie wymagają zazwyczaj stosowania podzapytań (tak też jest w przypadku naszego przykładowego dokumentu - dlatego powyższy przykład zapytania jest troche "naciągany").