|
|
|
מסתרי dot net 3.5 והפעם Linq
|
|
המאמר נכתב על ידי אריק וידר, טכנולוג בכיר בחברת Netwise. פברואר 2008
|
|
|
|
תקציר המאמר:
אריק וידר, טכנולוג בכיר בחברת Netwise כותב מאמר מקיף על Linq ועל הניסיון לפשט תהליכי עבודה מול מסדי נתונים. במאמר מידע על ארבעת החידושים בגרסה שבלעדיהם לא ניתן להשתמש
ב-Linq: VAR; Anonumous type; Extenstion methods; Lambda.
וכן מידע מקיף על אופני שימוש ב- Linq, המטרות בפיתוח Linq, הקטגוריות העיקריות שלו, ביצוע שאילתות, פונקציות הרחבה ומידע חשוב נוסף ללומדים את הנושא.
|
|
|
|
הניסיון לפשט את העבודה חוצה מערכות, ארגונים וחברות ולא פוסח גם על מיקרוסופט העולמית. עבודה מול מסדי נתונים היא בדרך כלל מורכבת ומסועפת, לכן הניסיון לפשט אותה עומד בראש סדר העדיפויות של הענקית. אז האם השאילתות ב-SQL עומדות להיעלם? האם באמת נראה עבודה פשוטה יותר מול מסדי הנתונים?
|
|
|
|
בעוד זמן קצר תופץ גרסה חדשה לתשתית dot net של מיקרוסופט. הגרסה תכלול מספר חידושים ובהם (Language Integrated Query) Linq.
|
|
|
|
עוד לפני ה- Linq: ארבעה חידושים בגרסה
|
|
הגרסה החדשה כוללת מספר חידושים שבלעדיהם לא ניתן להשתמש ב-Linq.
|
|
|
שובו של ה-VAR
כותבי ה-javascript שביניכם ודאי מכירים את ה-VAR, אותו משתנה שיכול להכיל סוגי ערכים שונים ולבצע עליהם פעולות. בגרסה החדשה, dot net 3.5 ניתן להגדיר משתנה מסוג VAR, להציב בו ערך מטיפוס מסוים ולבצע בו את הפעולות הרצויות. חשוב לדעת, לא ניתן להחליף את סוג הערך המוצב ב-VAR. אחרי הצבת טיפוס הערך (למשל string), נקבל intellisense מלא למשתנה ה-VAR ואת כל המתודות של הטיפוס המוצב, כאילו שהיינו עובדים מלכתחילה עם משתנה מסוג string.
|
|
|
|
|
|
Anonymous type
בגרסה החדשה, dot net 3.5 ניתן להציב טיפוסי (type) מידע בלתי מוגדרים מראש ב-VAR. בעת ההשמה הקומפיילר מייצר anonymous type. הוא גם יזהה סוגים זהים של טיפוסים.
|
|
|
|
|
|
Extenstion methods
בעזרת פונקציונאליות זו ניתן להוסיף מתודות לכל טיפוס שהוא. נתמך גם על ידי sealed class, תומך ב-intellisense, ניתן לבצע overloading של מתודות קיימות.
|
|
|
|
|
|
הלמבדה (lambda)
הלמבדה היא צורת תחביר חדשה ב-C# שבעזרתה ניתן לכתוב פחות קוד ולהבין את הקוד טוב יותר.
התחביר של למבדה
|
|
|
Simple syntax:
parameter=>expression
multiple parameters
(p1,p2,…)=>expression
no parameters
()=>expression
multiple expressions
(p1,p2,…)=>{expression1;expression2;…}
|
|
|
|
|
|
|
לומדים להשתמש ב- Linq
|
|
ה-VAR, הלמבדה, ה-Anonumous type וה ExtensionMethods- הם שמאפשרים לנו להשתמש ב-Linq.
|
|
|
המטרות בפיתוח Linq
|
|
לצמצם את הצורך לעבוד עם כלי פיתוח אחד עבור ה-DB וכלי פיתוח אחר עבור האפליקציה.
|
|
|
לצמצם את ההתמחות של מפתח האפליקציה בשפת ה-SQL.
|
|
|
ליצור אחידות בגישה לצורות אחסון שונות של מידע הקיימות באפליקציה (קבצי XML, מסד נתונים רלציוני ואובייקטים), והכול בשפה מועדפת על המפתח (C# ,VB .net וכדומה) תוך בדיקת שגיאות בקומפילציה, יכולות debug ,intellisense וכל שאר מנעמי התכנות המוכר.
|
|
הבסיס של Linq הוא סט של תבניות המאפשרות את הגמישות לגשת לכל סוגי המידע. התבניות הללו מציינות איך אובייקט יכול להפוך ל"שאיל" (quardable) ומאפשרות את כל פעולות התחקור המוכרות לנו (select ,where ,grouping ,ordering ,joining).
|
|
|
|
באמצעות מימוש תבניות אלה יכול כל dataprovider להפך ל"שאיל".
|
|
|
שלוש הקטגוריות העיקריות של Linq
1. Linq to object: שאילתות מול אובייקטים בזיכרון
2. Linq to ado.net: שאילתות מול מסד הנתונים MS SQL, שאילתות מול dataset ושאילתות מול ישויות. בעזרת Linq to sql ניתן ל"מדל" את מסד הנתונים לאובייקטי Dot Net ואז לתשאל את מסד הנתונים בעזרת שאילתות של Linq ולבצע פעולות עדכון, הכנסה ומחיקה. קיימת גם תמיכה בטרנזקציות, views, ו-storedprocedures
3. Linq to XML: שאילתות מול מקור XML
שאילתה פשוטה ב-Linq תתחיל ב from- ומסתיים ב-select, ומבחינה זו מדובר בתחביר שונה ממה שהתרגלנו אליו ב-SQL.
|
|
|
|
|
|
|
ביצוע שאילתה על טבלה וקבלת חלק מהשדות בלבד
|
|
|
var worker = from w in Workers
select new {
c.WorkerD, c.WorkerFirstName , c.WorkerLastName};
|
|
|
|
|
|
חיבור וחיסור – כל האופרטורים של SQL תקפים גם ב-linq
|
|
|
|
|
|
Linq to object תומך בכל האובייקטים המממשים את ienumarable
Linq to object תומך בכל האובייקטים המממשים את ienumarable ובכך ניתן להשתמש באופרטורים כדוגמת ,count ,average ,max ,min ,cast ,first ,last ,groupby ,orderby ורבים נוספים.
|
|
|
|
|
|
פונקצית הרחבה מקלה בביצוע paging
פונקצית הרחבה נחמדה מקלה עלינו בביצוע paging. קטע הקוד הבא בוחר 2 ספרים (Take) ומתחיל לקחת אותם (Skip) החל מהספר השני:
|
|
|
|
|
|
|
אם חזון מייקרוסופט יתממש, והמפתחים יתרגלו לתחביר של השפה השונה, יוקלו חיי המפתחים בצורה משמעותית. מכיוון שמדובר בקופסה שחורה יש לבחון האם השימוש בטכנולוגיה המתאימה מתאים לצרכים ולביצועים הדרושים ואת כל התשובות לתהיות הללו בוודאי נקבל בזמן הקרוב.
|
|
|
אתרים בנושא
http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx
http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx
|
|
|
|
|