משתמש:Kdaniel/Linq
מתודולוגיית Linq נוספה לNet. בגרסתה ה3.5, ומהווה תוספת של מקבץ ביטויים לתשאול טיפוסים דמויי מערכים. Linq יכול לתשאל כל טיפוס שמממש את הממשק IEnumerable
. בנוסף חשוב לציין שעיקר התועלת במתודולוגיית Linq היא צורת הביטויים (Syntax) שמאפשרת לנו פשוט לציין מה אנחנו רוצים לעשות במקום להתמקד בדרך להגיע אל התוצאה הרצויה, נביא דוגמה:
Dim arr As IEnumerable(Of Integer) = New Integer() {0, 1, 2, 3, 4, 99}
Function WithoutLinq() As IEnumerable(Of Integer)
Dim out = New List(Of Integer)
For Each itm In arr
If itm > 2 And itm < 10 Then
out.Add(itm)
End If
Next
Return out
End Function
Function UsingLinq() As IEnumerable(Of Integer)
Return (From p In arr Where p > 2 And p < 10)
End Function
בודגמה שלמעלה, שני הפונקציות מחזירות את כל המספרים שגדולים מ2 וקטנים מ10 מתוך המערך arr שמוכרז בתחילת הדוגמה. ההבדל היחיד ביניהם הוא בצורת הכתיבה. בפונקציה WithoutLinq
מבצעת את הסינון ללא שימוש בLinq ולכן כוללת לכתוב הרבה קוד שלא קשור ישירות לפתרון הבעיה, כמו לולאת For Each
או לולאת מונה וכדומה. להבדיל, בפונקציה UsingLinq
, מתקבלת אותה התוצאה ע"י משפט שבעצם אומר "תוציא את כל האיברים שמתקיים בהם התנאי X" וLinq דואג לכל השאר.
בנוסף, Linq מהווה יסוד למספר טכנולוגיות נוספות כגון LINQ to Objects, LINQ to XML, LINQ to DataSets וLINQ to SQL.
LINQ to Objects
עריכהLINQ to Objects מאפשר תישאול של טיפוסים דמויי מערכים, ויישים על כל טיפוס שמממש את הממשק IEnumerable
LINQ to XML
עריכהLINQ to XML הופך תוכן XML לעץ של XElement
ומתשאל אותם.
LINQ to SQL
עריכהLINQ to SQL הוא בעצם ORM תואם Linq. ע"י שימוש בטיפוסים מסוג IQueryable
ו(IQueryable(Of T
הג'נרי, LINQ to SQL מאפשר לתשאל מסדי נתונים תוך שמירה על תאימות טיפוסים (type safe) כמקובל בסביבת NET.
LINQ to DataSets
עריכההיות וLINQ to SQL תומך רק במסדי נתונים מסוג Microsoft SQL Server, כדי לתמוך גם בADO.NET נכלל בLinq גם LINQ to Dataset שעובד מול Datasets שתומכים ברשימה ארוכה של מסדי נתונים.