czwartek, 29 listopada 2007

LINQ: sztuczki składniowe C# 3.0 (2)

Kontynuacja poprzedniego postu ...

4. Wyrażenia inicjalizujące obiekty. Zamiast pisać:

Address a = new Address();
a.City = "Cracow";
a.Street = "Nowa";

zapiszmy to krócej (a kompilator wykona za nas resztę):

Address a = new Address() { City = "Cracow , Street = "Nowa" };

5. Typy anonimowe - w wyrażeniu inicjalizującym nie podajemy ... nazwy klasy:

var a = new { City = "Cracow , Street = "Nowa" };

6. Wyrażenia pytające - ta sztuczka powstaje jako ... uproszczenie zapisu wielokrotnego złożenia wyżej wymienionych sztuczek. Zapytania dotyczą wszystkich obiektów implementujących generyczny interfejs IEnumerable. Przykładowo może wyglądać to tak:

List list = new List {
new Point {M = "AAA", K = "BBB"},
new Point {M = "CCC", K = "DDD"},
new Point {M = "EEE", K = "FFF"},
};

var result = from c in list
where (c.M == "AAA" || c.M == "EEE")
select new { c.K };


Kompilator zamienia to na postać:

var result = list
.Where(c => (c.M == "AAA" || c.M == "EEE"))
.Select(c => new { c.K });


Czyli select to nic innego jak ciąg wywołań metod rozszerzających dla generycznego typu IEnumerable (zdefiniowanych w odpowiedniej przestrzeni nazw LinQ), których argumentami są delegacje zapisane w postaci wyrażeń lambda, a wynik wyrażony jest za pomocą anonimowego typu.

Korzystając również z var w prosty bardzo sposób możemy iterować wynik zapytania, np:

foreach (var s in result)
{
Console.WriteLine(s.K);
}

Brak komentarzy: