Biblioteki warte poznania: MoreLINQ

Nie ma się nad czym zbytnio rozwodzić, ponieważ MoreLINQ jest biblioteką, która po prostu rozszerza podstawowe LINQ o dodatkowe operatory. Ja najczęściej korzystam z DistinctBy(), MinBy() oraz MaxBy(). Takie rozszerzenie nie tylko oszczędza mi czas, ale również sprawia, że kod jest „czystszy” i np. to co napisałbym w 3 linijkach mam w jednej – krótkiej i jasnej. Z pełnym przekonaniem polecam!

Znacie coś podobnego, co rozszerza nam LINQ o jeszcze inne operatory?

Czekam na komentarze i do zobaczenia następnym razem!

Reklamy

4 comments

  1. Pingback: dotnetomaniak.pl
  2. Biblioteka całkiem spoko. Mam jednak wątpliwości co do jej używania. W pracy na przykład mamy osobny projekt (dll), który udostępnia metody pomocnicze do .NET’a (bez MVC itp, czysty .NET). Między innymi są to extension methods dla kolekcji, enum-ów, string-ów, wielowątkowości itd. Uważam, że dołączanie zew. biblioteki do używania 3-5 dodatkowych rozszerzeń mija się trochę z celem. Lepiej napisać to samemu w ramach jednej dll-ki, tym bardziej że to kilka linii kodu (co innego gdyby kosztowało to dużo pracy). Przecież taki MaxBy to tak na prawdę w czystym LINQ (argumenty takie same jak w MoreLinq, czyli: source, selector, comparer):
    return source.Aggregate((agg, next) => comparer.Compare(selector(next), selector(agg)) > 0 ? next : agg);

    MaxByOrDefault, wystarczy dodać:
    source.DefaultIfEmpty().Aggregate...

    Tak z pamięci, to korzystam jeszcze z:
    – Duplicates() (coś jak DistinctBy(), ale zwraca duplikaty, a nie unikalne elementy),
    – FlattenTree() (spłaszcza drzewo, selektorem wybieramy property zwracające elementy podrzędne, np. „Children”).

    Co do czystszego kodu, to w pełni się zgadzam 🙂

    Lubię to

    1. Sport nauczył mnie takiej rzeczy – jeśli stoisz i możesz usiąść to usiądź, jeżeli zaś siedzisz, a możesz poleżeć – nie krępuj się. Chyba jestem dość leniwy 😀 Być może nic nie stoi na przeszkodzie, żeby sobie stworzyć takie dodatkowe metody – tylko po co jeżeli coś jest dostępne od ręki i działa dobrze 🙂 Wiadomo, wszystko zależy od projektu i potrzeb. Korzystam oczywiście z szerszego spektrum możliwości moreLINQ, ale te 3 wykorzystuję najczęściej.

      Jeżeli chodzi o DistinctBy() – nie wiem czy dobrze Cię zrozumiałem. DistinctBy() działa tak, że jeżeli masz w kolekcji jakieś powtarzające się elementy to je łączy i zwraca jako jeden. Przydatne szczególnie gdy stosujemy np. autocomplete w filtrze nazwisk czy imion i mamy 10 Nowaków. Zamiast 10x pokazać „Nowak” pokazuje tylko raz 🙂

      Lubię to

  3. MoreLinq jeszcze wprowadza jedną fajną rzecz jaką jest metoda Batch. Przydatka gdy ktoś wysyła wieeeeelkie pakiety przez internet, a przerwanie internetu może wiązać się z wykrzaczeniem projektum, dlatego Batch pozwala na „podzielenie” kolekcji na mniejsze elementy i po kolei je wysyłać.

    Lubię to

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s