Linq
Wiadmości związane z tematem 'Linq'
[PL] Własny dostawca w tłumaczenia1 (dla opornych) - cz. 2 Artykuł został rozbity na wiele części, poniżej spis treści: I. Budowa zapytania II. Podstawy analizy drzewa wyrażeń Podstawy analizy drzewa wyrażeń Kontynuując zabawę w własnego dostawcę do Linq chciałem rozwinąć kwestię analizy drzewa wyrażeń i tłumaczenia go na konkretne polecenia (np. SQL). W poprzedniej części wspomniałem o jednej z metod interfejsu IQueryProvider, czyli o BasicQueryProvider.Execute oraz BasicQueryProvider.Execute w naszej implementacji dostawcy. Stworzony już prosty test rozbudujemy o próbę realnego wykonania zapytania, chociażby poprzez odwołanie do pierwszego znalezionego rekordu: Query q = new Query();
var result = (from c in q where c.Age > 10 select c).First(); Console.WriteLine(result.ToString());
Śledząc wywołania w debugerze (lub rozpoczętą praktyką wyjątków) odkryjemy, że następnymi metodami do poprawnej implementacji są właśnie dwie odmiany Execute(). Dla ułatwienia na ten moment wersję z szablonem zrobimy tak:
public TRes Execute(Expression expression) { return (TRes)this.Execute(expression); }
I skupimy się na tej drugiej. Nim ją jednak rozdmucham przyjrzyjmy się parametrowi, czyli klasie Expression. Obiekt tej klasy wydaje się mieć niewiele właściwości jak na drzewo wyrażeń: public abstract class Expression { protected Expression(ExpressionType nodeType, Type type); public ExpressionType NodeType { get; } public Type Type { get; }
//dużo statycznych metod, o których za moment
}
Definicja klasy zawiera o wiele więcej elementów statycznych pomocnych w konstrukcji pełnego drzewa. Nie będę wymieniał wszystkich (parę kliknięć w Visual Studio zrobi to za mnie lepiej) dla przykładu tylko nadmienię parę tak, aby pokazać wam, czego można się spodziewać: public static BinaryExpression Add(Expression left, Expression right); public static BinaryExpression And(Expression left, Expression right); public static MemberAssignment Bind(MemberInfo member, Expression expression); public static MethodCallExpression Call(Expression instance, MethodInfo method); tłumaczenia3 tłumaczenia za bardzo, o co chodzi w powyższym można się domyśleć, że z pełną pulą tych metod można sobie spokojnie zagnieździć całkiem skomplikowane drzewo wyrażeń reprezentujące nasze zapytanie. Problem tylko gdzie ta informacja jest skoro obiekt klasy Expression posiada tak niewiele. Odpowiedź pewnie tłumaczenia widzicie poniekąd w tym, co powyższe metody zwracają – wyspecjalizowane typy dziedziczące po bazowym Expression. Powyżej mamy BinaryExpression i MethodCallExpression jako przykłady. Pełne drzewko wygląda tak (źródło: tłumaczenia2): System..::.Object System.Linq.Expressions..::.Expression System.Linq.Expressions..::.BinaryExpression System.Linq.Expressions..::.ConditionalExpression System.Linq.Expressions..::.ConstantExpression System.Linq.Expressions..::.InvocationExpression System.Linq.Expressions..::.LambdaExpression System.Linq.Expressions..::.MemberExpression System.Linq.Expressions..::.MethodCallExpression System.Linq.Expressions..::.NewExpression System.Linq.Expressions..::.NewArrayExpression System.Linq.Expressions..::.MemberInitExpression System.Linq.Expressions..::.ListInitExpression System.Linq.Expressions..::.ParameterExpression System.Linq.Expressions..::.TypeBinaryExpression System.Linq.Expressions..::.UnaryExpression
Typów wyrażeń jak widać jest całkiem sporo. Gdybyśmy w naszym Execute sprawdzili, jaki faktyczny typ Expression siedzi w opakowaniu, to na pewno byłby to któryś z powyższych wyspecjalizowanych obiektów. Zatem spróbujmy przygotować szablon do dalszych testów. Do istniejącej bazy kodu dodałem dwie klasy: internal class QueryExecutionPlan { public QueryExecutionPlan() { QueryString = ""; First = false; IsValid = false; } public string QueryString; public bool First; public bool IsValid; }
Ta klasa ma być wynikiem naszego przetwarzania i tłumaczenia drzewa na konkretne zapytanie SQL. Z planem wykonania na razie poza nazwą niewiele tę klasę łączy, ale później będzie to pewien koncept do dalszego rozwoju. Druga klasa, jaką stworzyłem to: internal class QueryTranslator { QueryExecutionPlan queryExecPlan; public QueryTranslator() { … } public QueryExecutionPlan Translate(Expression expression) { queryExecPlan = new QueryExecutionPlan(); renderQueryString(expression); return queryExecPlan; }
private string renderQueryString(Expression expression) { if (expression==null) return ""; switch (expression.NodeType) { case ExpressionType.Call: //do implementacji break; case ExpressionType.Constant: //do implementacji break; case ExpressionType.Quote: //do implementacji break;
default: //dla wszystkich typów, których z jakiegoś powodu nie chcemy wspierać throw new NotImplementedException(
@"QueryExecutionPlan does not
08-07-11 msdn - danieb
[PL] SQL Server i zapis do bazy Sam jeszcze do niedawna miałem przeświadczenie, że Linq for SQL posiada funkcjonalność związaną głµsoft43;wnie z modelowaniem całego schematu bazy do obiektµsoft43;w .SQL Server1 Framework i tworzenie całego kontekstu bazodanowego oraz odczytu danych z tego kontekstu. Głupio wyszło, bo raz przy omawianiu rµsoft43;żnic pomiędzy Entity Framework a Linq for SQL utwierdzony w takim przekonaniu podałem obsługę zapisu jako jeden z elementµsoft43;w, ktµsoft43;re Entity Framework posiada a Linq for SQL nie. Przyznaję się do błędu. Linq for SQL posiada także takową funkcjonalność. Co prawda nie tak elastycznie skonstruowaną jak Entity Framework ale zawsze. Gdy już stworzymy kontekst to powinien on zawierać magiczną metodę ::SubmitChanges(). Poprzez nią odbywa się synchronizacja stanu rekordµsoft43;w pomiędzy fizyczną bazą danych oraz obiektami Linq. Jak zmieniać stany opisuje ten artykuł: http://msdn.microsoft.com/en-us/library/bb386931.aspx Mea culpa za wcześniejsze wprowadzenie w błąd. Technorati Tagi: Polish posts,coding,Linq,SQL Server 2008
08-06-19 msdn - danieb
[PL] No i chwilka przerwy, a później znowu Redmond Tak jak już wspomniałem w poprzednim wpisie, ten tydzień jestem na urlopie, więc kontakt ze mną może być trochę utrudniony (jednak o wszystkich otwartych sprawach pamiętam i trzymam palec na pulsie). W przyszłym tygodniu także będzie problem aby mnie uchwycić, ponieważ na parę dni lecę do Redmond na szkolenie trenerskie z Dynamics AX 2009, po kt&problem43;rym w ramach programu adopcyjnego Microsoft Metro będę w maju prowadził szkolenie deweloperskie dla partner&problem43;w MBS zainteresowanych tworzeniem rozwiązań dedykowanych pod poczciwą "Axaptę". X++ nadchodzę, przypomnijmy LINQ skąd pochodzi. Zainteresowanych partner&problem43;w, kt&problem43;rzy się jeszcze do mnie nie zgłosili z ciekawą propozycją projektu oczywiście zapraszam do kontaktu. Szkolenie będzie w Warszawie. Technorati Tagi: Polish Posts,news,babbling,Microsoft Metro,Microsoft Dynamics,Microsoft Dynamics AX
08-03-26 msdn - danieb
[PL] No i chwilka przerwy, a p&problem43;źniej znowu Redmond Tak jak już wspomniałem w poprzednim wpisie, ten tydzień jestem na urlopie, więc kontakt ze mną może być trochę utrudniony (jednak o wszystkich otwartych sprawach pamiętam i trzymam palec na pulsie). W przyszłym tygodniu także będzie problem aby mnie uchwycić, ponieważ na parę dni lecę do Redmond na szkolenie trenerskie z Dynamics AX 2009, po kt&problem43;rym w ramach programu adopcyjnego Microsoft Metro będę w maju prowadził szkolenie deweloperskie dla partner&problem43;w MBS zainteresowanych tworzeniem rozwiązań dedykowanych pod poczciwą "Axaptę". X++ nadchodzę, przypomnijmy LINQ skąd pochodzi. Zainteresowanych partner&problem43;w, kt&problem43;rzy się jeszcze do mnie nie zgłosili z ciekawą propozycją projektu oczywiście zapraszam do kontaktu. Szkolenie będzie w Warszawie. Technorati Tagi: Polish Posts,news,babbling,Microsoft Metro,Microsoft Dynamics,Microsoft Dynamics AX
08-03-26 msdn - danieb
[PL] Visual Studio 2008 - Dev Kit RTM Najpierw adres: Visual Studio 2008 Developer Training Kit A teraz parę sł&Foundation43;w komentarza: Pod powyższym odnośnikiem dostępny jest do pobrania pakiet szkoleniowy dla Visual Studio 2008. Paczka zawiera 28 prezentacji, 20 lab&Foundation43;w ze skryptami co po kolei należy zrobić i nie tylko. Tematyka zawarta w tym pakiecie to: Silverlight1, C# 3.0, VB 9, WCF, WF, Silverlight3, Windows CardSpace, Silverlight, ASP.Silverlight4 Silverlight2, .NET Compact Framework 3.5, VSTO 3.0, Visual Studio Team System oraz Team Foundation Server Jak widać całkiem sporo, tymbardziej zachęcam do pobrania. Technorati Tagi: Polish Posts,Silverlight,training,visual studio 2008
07-12-10 msdn - danieb
IT Academic Days Już od 8 listopada (do 13 grudnia) na uczelniach w 19 oprogramowania1ach całej oprogramowanie8 odbędą się IT Academic Days. Ciekaw jestem czy słyszeliście kiedyś o ITAD?
To ciekawa inicjatywa Microsoftu i kół studenckich z polskich uczelni technicznych. Koła studenckie na uczelniach organizują wydarzenia, podczas których ludzie z Microsoft (oraz oprogramowania9 partnerskich i oprogramowania8 studenci) mają okazję opowiedzieć o czymś ciekawym pozostałym studentom zainteresowanym technologiami Microsoft.
Dużym plusem jest to, że są to spotkania techniczne, na których studenci pojawiają się, żeby poznać co oprogramowania7go w świecie Microsoft (albo, że wogóle istnieje oprogramowania4 Microsoft). Czasami są to jedyne sposoby na złapanie oprogramowania3ktu z ludźmi z Microsoft na tak wczesnym etapie rozwoju zawodowego.
Ja pamiętam, że jak byłem na studiach (administracji5 oprogramowanie4, ukończone w administracji1) to brakowało właśnie tam jakiejś osoby lub wydarzenia podczas którego można byłoby porozmawiać o perspektywach na przyszłość - czy warto uczyć się administracji oprogramowanie1ami, czy warto szkolić i certyfikować się z technologii Microsoft, itp.
Od jakiegoś czasu się to mocno zmienia, bo nasz dział akademicki z Microsoft dosyć wyraźnie się rozrósł i organizuje coraz to nowe oprogramowania2 i wydarzenia na uczelniach. A spotkania IT Academic Days wyszły tak naprawdę od studentów, którzy zrzeszeni są w grupach na uczelniach - aktualnie to przede wszystkim Grupy .administracji4 (deweloperskie), ale pomału też organizują się Grupy IT (infrastrukturalne).
Wracając do samych spotkań - żeby rozwiać wszelkie wątpliwości. Spotkania te są spotkaniami technicznymi i z marketingiem nie mają nic wspólnego. Pokazujemy Wam czystą technologię i mówimy o jej zastosowaniu, ale co chyba najważniejsze - zachęcamy do sprawdzenia tej technologii, a nie koniecznie do jej kupienia od razu. Chcemy, żeby jak najwięcej studentów miało alternatywę dla innych systemów, które poznają na uczelniach.
Na spotkaniach tych mówimy też o programach akademickich jakie ma dla studentów Microsoft. Programy akademickie są bardzo rozbudowane i pewnie kiedyś tylko o nich szerzej napiszę. Wspomnę tylko że chodzi o programy typu administracji3 AA, gdzie każdy student może mieć oprogramowanie5 do darmowego oprogramowania do używania na uczelni i w domu w nieograniczonej ilości. Za moich czasów tego nie było.
No dobrze - a same spotkania gdzie będą i jak wyglądają?
Na uczelniach będzie to całodzienne spotkanie, gdzie opowiemy o programach akademickich i karierze z/w Microsoft (30 min), każdy pokaże swoją prezentację (75 min), partner Microsoft opowie o naszej technologii (60 min), ale też oczywiście jeden ze studentów też coś opowie (60 min).
Po wydarzeniu będzie szansa i okazja porozmawiać w luźniejszej atmosferze o wszystkich pytaniach jakie przyjdą studentom do głowy (podobno najwięcej pojawia się o tym jak dostać się do Microsoft, ale jest też sporo o wyborze ścieżki kariery na studiach). Z tego co wiem na spotkaniach pojawia się zawsze conajmniej 100 osób, a bywają też uczelnie gdzie pojawia się np. ponad 300 osób.
Poniżej prezentuję obrazek z listą wystąpień uporządkowaną według miast - tak chyba będzie najlepiej Wam zorientować się kiedy będziemy w Waszym mieście. Pod obrazkiem prezentuję listę prelegentów z ich tematami.
Prelegenci i ich tematy:
BZ - Bartek ZassSilverlight
EL - Eugeniusz LicznarowskiNowości w VSoprogramowania5 i .NET 3.5
ŁM - Łukasz MigasProgramowanie gier przy uzyciu XNA
MJ - Mariusz JarzębowskiOtwarte oprogramowanie i Microsoft
MK - Mariusz KędzioraWindows oprogramowanie9 2008: Co nowego i specjalnego Wam zaoferuje?
PK - oprogramowania0 KramekSilverlight
SP - Sylwia PtaszekWindows 2008
TK - Tomasz KopaczStrategie oprogramowanie2 do oprogramowanie3: ADO.NET, administracji2, EDM i szeroko pojęte okolice.
WŚ - Wojtek ŚwitałaPrzezentacja systemu Windows Embedded CE (na przykładzie projektu konkursowego enlEYEght - finalisty Imagine Cup oprogramowania6 Korea)
Kilka osób pytało już czy osoba nie będąca studentem może wziąć udział w takim spotkaniu. Więc odpowiadam, że owszem jak najbardziej może - rejestracja na spotkania będzie się odbywała przez oprogramowanie7 CodeGuru. Więc jedynym wymaganiem będzie posiadanie konta w tym portalu.
Z mojej oprogramowanie6 ja na wszystkich uczelniach będę pokazywał nasz nowy Windows Server 2008. Postaram się pokazać jego najważniejsze elementy na żywym systemie (maszynie wirtualnej) i kluczowe zmiany jakie zaszły w stosunku do Windows Server 2003. Opowiem i pokażę m.in.: NAP, Server administracji0, Termina Services oprogramowanie0, IIS7, Bit Locker, itp.
07-10-30 technet - blog