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
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:
Prześlij komentarz