Postawiłem przed sobą dość proste zadanie dodania nowego 'ficzeru' do pewnej wewnętrznej ministronki w firmie. Ot, taka mała lista obsługiwanych aplikacji. Z biegiem czasu 'mutacji' produktu powstało wiele, dlatego lista stała się dość pokaźna i znalezienie czegoś w niej stało się trudne.
Czasami można zaobserwować następujący kod:int[] firstArray = Enumerable.Range(1, 1000).ToArray(); int[] secondArray = Enumerable.Range(1, 1000).ToArray(); foreach (int item in firstArray) { Process(item); } foreach (int item in secondArray) { Process(item); } Mam na myśli sytuacje kiedy mamy kilka osobnych tablic, ale przetwarzanie ich jest takie same lub bardzo podobne. Inny przykład to przetworzenie tablicy, a potem pojedynczego elementu pochodzącego z innego źródła...
Sztuka programowania 3990 dni, 18 godzin, 15 minut temu 211 źrodło rozwiń
Enumerable.Empty Jeśli funkcja zwraca IEnumerable, nie zwracaj pustej dopiero co stworzonej listy. Enumerable.Empty() jest właśnie tym czego oczekuje wywołujący kod. return new MyClass[0]; // Better return Enumerable.Empty
Sztuka programowania 4076 dni, 16 minut temu 423 źrodło rozwiń
W tym wpisie zamieszczę kilka wskazówek i informacji jak w miarę bezboleśnie rozpocząć naukę i pracę z Linq i na co warto zwrócić uwagę. Praca z linq daje możliwość obsługi wielu źródeł danych za pomocą tych samych metod, jako przykład wykorzystam bazę danych, którą pokazałem kilka wpisów temu. Do połączenia z bazą danych używam EntityFramework. Dla przypomnienia schemat poniżej. Składania W linq mamy możl...
« Mity o sieci sie26Kategorie: .Net, C# przez graf W ostatnim wpisie z tej serii chciałem przedstawić najważniejszą cechę linq, mianowicie niezależność od źródła danych. Jak pisałem wcześniej Linq jest połączeniem 5 elementów:extension methodsyieldFunc, Predicate, Actionwyrażenia lambdaIQueryable i Expression Trees We wszystkich poprzednich wpisach pracowaliśmy na kolekcjach, które przechowywane były w pamięci, jednak linq ma dużo większe możliwości obsługuje przeróżne źródła danych. Ja...
Sztuka programowania 4124 dni, 6 godzin, 26 minut temu 135 źrodło rozwiń
Dzisiaj opisze mechanizm lamba expression. Dla przypomnienia Linq jest połączeniem 5 elementów:extension methodsyieldFunc, Predicate, Actionwyrażenia lambdaIQueryable i Expression Trees Wyrażenia lambda to nic innego jak syntactic sugar czyli taki bonus od Microsoftu, który ułatwia pisanie kodu. Wyrażenia lambda upraszczają zapisu delegatu. Przypomnijmy przykład z poprzedniego wpisu.C# class Program { ...
Sztuka programowania 4130 dni, 4 godziny, 5 minut temu 183 źrodło rozwiń
W kolejnym wpisie o linq przedstawię zasadę działania Func, Predicate, Action. Dla przypomnienia Linq jest połączeniem 5 elementów:extension methodsyieldFunc, Predicate, Actionwyrażenia lambdaIQueryable i Expression Trees Przyjrzyjmy się najpierw deklaracji tych trzech typów. C# public delegate void Action
Sztuka programowania 4134 dni, 6 godzin, 51 minut temu 210 źrodło rozwiń
W poprzednim wpisie opisałem extension methods, dzisiaj czas na kolejny element moim zdaniem bardzo ważny do zrozumienia działania linq mianowicie słowo kluczowe yield. Dla przypomnienia Linq jest połączeniem 5 elementów:extension methodsyieldFunc, Predicate, Actionwyrażenia lambdaIQueryable i Expression Trees Zasadę działania słowa kluczowego yield najlepiej zobrazuje przykład. Załóżmy, że mamy metodę, która generuje ...
Sztuka programowania 4139 dni, 7 godzin, 11 minut temu 165 źrodło rozwiń
sie10Kategorie: .Net, C# przez graf Blogowania chciałem rozpocząć od cyklu wpisów o Linq. Każdy dobry programista C# powinien umieć się posługiwać Linq, nie każdy niestety wie jak to właściwie działa. Linq wprowadza wspólny interfejs do pracy z kolekcjami niezależnie od źródła danych. Linq jest połączeniem 4 elementów:extension methodsyieldFunc, Predicate, Actionwyrażenia lambda W tym poście omówię extension methods czyli metody rozszerzające. Extension methods jak sama nazwa wskazuje ...
Sztuka programowania 4141 dni, 2 godziny, 23 minuty temu 132 źrodło rozwiń
Dzisiaj króciutka notka, ale mam nadzieję, że komuś przyda się. Załóżmy, że mamy kolekcję zawierającą np. DateTime. Naszym zadaniem jest zwrócenie maksymalnej wartości. Za pomocą LINQ łatwo to zrobić:DateTime[] dateTimeList=/.../; DateTime maxValue = dateTimeList.Max(); Niestety, w sytuacji gdy kolekcja zawiera 0 elementów dostaniemy wyjątek: “Sequence contains no elements”. Potrzebujemy funkcji MaxOrDefault, która niestety nie istnieje. Mamy do dyspozycji FirstOrDefault, SingleOrDefault, ale nie ma o...
Chciałbym rozpocząć nowy cykl na blogu, tym razem o PLINQ. Dzisiaj zaczniemy od podstaw czyli czym jest LINQ oraz kiedy z niego korzystać. PLINQ to skrót od Parallel Linq czyli są to zapytania wykonywane równolegle. W dzisiejszym świecie, programiści starają się zrównoleglić co tylko jest możliwe. Samodzielne pisanie LINQ w sposób równoległy jest dość niewygodne i dlatego Microsoft wprowadził PLINQ. Należy oczywiście zawsze pamiętać, że próba zrównoleglenia operacji, które muszą po prostu zostać wykona...
Sztuka programowania 4287 dni, 23 godziny, 33 minuty temu 224 źrodło rozwiń
W LINQ mamy dwie metody First() oraz Single(). Obie metody zwracają po jednym rekordzie. Jaka jest więc między nimi różnica? Zobaczmy na kawałek kodu i jego reprezentację w bazie MS SQL.
I’ve just published a little project of mine on GitHub, called VsDebugFx. It’s a NuGet package which you can install into your .NET project and get more expressiveness during your debugging sessions inside Visual Studio. It’ll let you evaluate expressions that use C# features which are not normally allowed by the IDE, namely: lambda expressions, anonymous types, LINQ queries and implicitly-typed arrays. I don’t want to repeat myself (DRY anyone?), so if you’re interested in knowing more, go check out th...
Zachęcam do przeczytania kolejnej części, tym razem o LINQ: http://msdn.microsoft.com/pl-pl/library/dobre-i-zle-praktyki-w-c-sharp–czesc-5.aspx
Sztuka programowania 4466 dni, 17 godzin, 54 minuty temu 307 źrodło rozwiń
W dzisiejszym poście przedstawię kontrolkę LinqDataSource oraz sposób jej implementacji w projekcie Web Site oraz Web Application. LinqDataSource odwołuje się do bazy danych inaczej niż SqlDataSource. Nasza dzisiejsza kontrolka do pracy potrzebuje obiekt kontekstu. Zanim pokażę jak go utworzyć potrzebujemy znowu jakieś przykładowe dane. Tym razem nasze dane utworzymy sami: Tworzymy nową aplikację Asp.NET Empty Web Application: Następnie w Solution Explorerze klikamy prawym przyciskiem na na...
Jak już wspomniałem w jednym z moich wcześniejszych postów, sortowanie danych możliwe jest za pomocą implementowania specjalnych interfejsów (IComparer, IComparable) i zapytań LINQ. LINQ jest... leniwe. Jednak wbrew pozorom może być to pożądana cecha. Znaczy to tyle, że nawet jeśli utworzymy zapytanie, to taka konstrukcja:var sort = from p in people2 orderby p.Age select p; nie wykona tego zapytania i nie przypisze nam wyniku do zmiennej "sort". Trzeba...
Sztuka programowania 4548 dni, 1 godzinę, 1 minutę temu 216 źrodło rozwiń
Zrobiłem mały test. Chciałem sprawdzić co jest wydajniejsze, LINQ czy użycie IComparera. Odpowiedź: "to zależy?" Na początek zrobiłem małą klasę obiektu do testowania, która wyglądała tak: Następnie w głównej pętli programu napisałem następujący kod: static void Main(string[] args) { string name = "Mr. Tomek"; Random r = new Random(); int size = 50; Stopwatch stopWatch = new Stopwatch(); while (size < repeats;="" ++a)="" {="" person[]="" people1="new" person[size];="...
Sztuka programowania 4548 dni, 1 godzinę, 1 minutę temu 132 źrodło rozwiń
W dzisiejszym wpisie zajmę się tematem łączenia kolekcji obiektów przy użyciu mechanizmów dostępnych w LINQ. Pokażę przykłady zastosowań metod Concat, Union, Intersect, Except oraz klauzuli Join (zarówno dla złączeń wewnętrznych jak i zewnętrznych). Dla każdego przykładu złączenia kolekcji przedstawię analogiczny sposób łączenia zbiorów danych w języku SQL.
Ponad dwa lata temu, popełniłem wpis na temat operacji na kolekcjach w C#. Post ten ku mej uciesze, wciąż cieszy się sporą popularnością, dlatego też postanowiłem napisać niejako jego kontynuację. Gdy dwa lata temu pisałem tamten wpis, wciąż dominującą wersją frameworka .Net, była ta oznaczona wersją 2.0. Dziś sytuacja się trochę zmieniła i przynajmniej w moim odczuciu, coraz więcej osób korzysta z wersji 3.5 i 4.0, a na horyzoncie jest już .Net 4.5, który pojawi się w pełni wraz z Windowsem 8 i Visual ...
Architektura 4580 dni, 8 godzin, 20 minut temu 296 źrodło rozwiń