Wpis z mikrobloga

Po co w składni LINQ .NET są właściwie nazwy zmiennych stworzonych wyłącznie na potrzeby konkretnego zapytania?
Przykładowo:

IEnumerable companyNames =
addresses.OrderBy(addr=> addr.CompanyName).Select(comp=> comp.CompanyName);

O ile bardziej czytelniejsze byłoby powyższe bez tego:

IEnumerable companyNames =
addresses.OrderBy(CompanyName).Select(CompanyName);

Ma to jakiś głębszy sens przy bardziej złożonych zapytaniach?

#programowanie #csharp
  • 8
@Telhurin: oczywiście, to są wyrażenia lambda, a nie same zmienne. Najprościej wytłumaczyć to matematycznie:
np.,
f(x) = x^2

normalnie w LINQ możesz użyć

var _obj = from adress in Adresses Where adress.CompanyName == "name" select adress;
IEnumerable companyNames =

addresses.OrderBy(addr=> addr.CompanyName).Select(comp=> comp.CompanyName);


@Telhurin: powiedzmy, że chcesz co drugi element to robisz:

IEnumerable companyNames =
addresses.OrderBy(addr=> addr.CompanyName).Select(comp=> comp.CompanyName).Where((comp, index) => index % 2 ==0)
@Telhurin: Ponieważ metody LINQ przyjmują funkcje, a nie obiekty. To niekoniecznie muszą być właściwości jakiegoś obiektu, a bardziej złożone zapytania. Wyrażenie x => x.Y jest tzw. wyrażeniem lambda oznaczającym mniej więcej: funkcja, która pobiera argument x i zwraca właściwość Y argumentu x.
@piotrasz: Jezusie miły :D c# to też #nieprogramowanie? Od dziś będę pytał tylko o BASIC.

@Szab: Dzięki :). Rozumiałem że to wyrażania lambda, ale ich użycie wydawało mi się nieco udziwnione w prostych przykładach. Ale teraz do mnie doszło, że dzięki temu można użyć ich w dalszej części zapytania i budować np. bardziej złożone filtry.