Language Integrated Query
Language Integrated Query ובקיצור LINQ - שפה דקלרטיבית דמוית SQL לביצוע שאילתות, שמיקרוסופט שילבה והיבנתה בשפות האימפרטיביות של הדוט נט כ-#C ו-VB.NET. שפה זו מיועדת לעשות אבסטרקציה על פעולות שגרתיות ופעולות על מקור נתונים, ולתווך בין המשתמש בה לבין ביצוע הפעולה הנדרשת.
תוכן עניינים |
מהות השפה [עריכה]
שפה זו, מוטמעת בשורות הקוד עצמו, לביצוע שאילתות על מבני נתונים כמערך (array), אוסף (collection), רשימה (list), וכל המשתנים המוגדרים בדוט נט כטיפוסי IEnumerable. יעודה של השפה לאפשר למתכנת להתמקד במהות הפעולה המבוקשת ולא בטכניקה התכנותית ליצירת הפעולה. יתרונה בדומה לשפת SQL שהיא מאפשרת לתמצת קוד לשורות בודדות, לזרז את מהירות הפיתוח, להביא את הקוד לקריאות גבוהה, ולהפחית את רמת הבאגים בו.
לפני ההטמעה של שפה זו בדוט נט, אמנם התאפשרה כתיבת שאילתת SQL בדוט נט, אבל לא כחלק אינטגרלי מהשפה, אלא כפקודה שנשלחה אל בסיסי נתונים, ופוענחה על ידיהם, והתייחסה אך ורק לטבלאות בבסיסי הנתונים גופם, ולא אל נתונים בזיכרון כמו מערכים או DataSet.
שפה זו בנוסף מאפשרת לעבוד גם עם בסיסי נתונים וקובצי XML.
הרחבה זו קיימת בדוט נט החל מגרסת 3.5. בגרסה 4 של הדוט נט שפה זו שודרגה והוספה בה אופציה לבצע שאילתות מקביליות בריבוי תהליכונים (PLINQ).
דוגמאות [עריכה]
הסרת ערכים כפולים ומיון ברשימה [עריכה]
בדוגמה הבאה בשפת #C מתבצעת פעולה של הסרת ערכים כפולים מתוך משתנה רשימה המכיל מחרוזות ומיונם לאחר הסרת תווי רווח מקדימים. לתוך משתנה t מוכנסים הערכים המחרוזתים לאחר שבוצע בהם קיבוץ לפי תוכן. לאחר מכן לולאה עוברת על האיברים ומכניסה אותם למשתנה list2.
private List<string> DistinctAndOrderBy() { List<string> list = new List<string> { " BBB", "aaa", "hhh", " BBB", "aaa", " ZZZ", "hhh", " ZZZ" }; var t = from n in list orderby n.TrimStart() group n by n into distinctStr select distinctStr; List<string> list2 = new List<string>(); foreach (var disStr in t) list2.Add(disStr.Key); return list2; } // התוצאה שתתקבל היא: // list2 = aaa, BBB,hhh, ZZZ,
סכימת ערכי מערך [עריכה]
באמצעות שפה זו ניתן לסכום ערכי מערך בפקודה אחת. באמצעות הפעלת פונקציית Sum על מערך מתבצע סיכום של כל איברי המערך. פונקציה זו חוסכת את יצירת הלולאה שצריך ליצור בתכנות מסורתי.
int[] nums = new int[] {1,4,2,6,3,8,3,1,2,5}; int result = nums.Sum(); Console.WriteLine(result); תוצאה שתתקבל: 35
שליפת ערכים העונים לתנאי מסוים [עריכה]
דוגמה נוספת היא שליפת איברים הגדולים מהערך 5, ומיונם על פי גודלם. פעולה זו חוסכת לולאה וכן פעולת מיון של איברים בתוך המערך החדש.
int[] nums = new int[] {1,4,2,6,3,8,3,1,2,5,9}; var result = nums.Where(n => n > 5).OrderBy (n => n); תוצאה שתתקבל: 6 8 9
ראו גם [עריכה]
קישורים חיצוניים [עריכה]
- LINQ, אתר MSDN
- מדריך לינק, אתר וובמסטר
- תוכנת עזר לשפה, אתר linqpad
- 059 שפת שאילתות אינטגרטיבית LINQ, הפודקסט של רון ורן