PracticU

שאילתת LINQ פשוטה
מסוג Method-Like

בלי כתוביותעם כתוביות
PracticU › קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט › שאילתת LINQ פשוטה מסוג Method-Like
מילון מושגים:
LINQ - יכולת ב-.NET לכתוב שאילתות על אוספים ומקורות נתונים ישירות בתוך קוד C# בתחביר אחיד.
מתודה - פונקציה המוגדרת בתוך מחלקה ומתארת פעולה שאובייקטים מאותה מחלקה יכולים לבצע.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
C# - שפת תכנות מונחית עצמים של מיקרוסופט, המשמשת בעיקר לפיתוח יישומים על פלטפורמת .NET.
Entity Framework - ספריית מיקרוסופט שממפה בין אובייקטים בקוד לבין טבלאות במסד נתונים, ומאפשרת לעבוד עם הנתונים בלי לכתוב SQL ישיר.
פריימוורק - מסגרת תוכנה שמספקת מבנה וכלים מוכנים לפיתוח יישומים, כדי לחסוך כתיבת קוד חוזר.
תחביר - אוסף הכללים של שפת תכנות הקובעים כיצד לכתוב קוד תקין. הפרתם גורמת לשגיאת תחביר.
Lambda - פונקציה קצרה ואנונימית בקוד. גם שירות של AWS להרצת קוד בענן בלי לנהל שרתים.

שאילתת LINQ פשוטה מסוג Method-Like
כתיבת שאילתות SQL גולמיות בתוך C# לא נוחה: אין IntelliSense, וטעות בשאילתה מתגלה רק בהרצה. LINQ (Language Integrated Query) הוא סדרה של פונקציות שמאפשרות לבצע שאילתות מורכבות יותר ב-Entity Framework Core, והשיעור מראה את התחביר מסוג Method-Like.
בניית השאילתה
1. נקודת המוצא: מחליפים את שאילתת ה-SQL ב-Display Gifts by Price Range בשאילתת LINQ, שמחזירה מתנות במחיר בין 10 ל-40.
2. הסדר ב-LINQ: מתחילים מהאוסף (db.Gifts), ורק אחר כך מסננים. לכן אין צורך ב-from, והפונקציות נקראות Where, OrderBy ו-Select.
3. Lambda: כל פונקציה מקבלת ביטוי Lambda, למשל Where(gift => gift.Price >= 10 && gift.Price <= 40). הפונקציה מחזירה Queryable, כלומר השאילתה עדיין לא הסתיימה.
4. מיון: OrderBy למיון עולה ו-OrderByDescending ליורד.
5. Select: בוחרים את כל האובייקט, או יוצרים אובייקט חדש עם Id, Name ו-Price בלבד. התוצאה היא טיפוס אנונימי ולא Gift, והשאילתה ל-SQL הופכת ספציפית יותר.
6. משתנה: כדאי להגדיר var, כי הטיפוס המוחזר משתנה. שורה חדשה לפני כל נקודה משפרת קריאות.
התוצאה היא המתנות בטווח המחירים, ממוינות בסדר עולה.
שני תחבירים
התחביר המקורי הוא הפונקציות (Method-Like). התחביר השני, SQL-Like, משתמש במילים שמורות של C# ומתורגם מאחורי הקלעים לאותן פונקציות.
אחרי ההרצאה תוכלו לכתוב שאילתת LINQ בסיסית עם סינון, מיון ובחירת שדות.
השיעור הבא בקורס: שאילתת LINQ פשוטה מסוג SQL-Like

פרקי ההרצאה: שאילתת LINQ פשוטה מסוג Method-Like

  1. 00:00

    מהו LINQ

  2. 00:44

    הקושי בכתיבת SQL בתוך C#

  3. 01:40

    הדגמת DisplayGiftsByPriceRange

  4. 02:16

    בניית השאילתה עם select ו-where

  5. 02:54

    סדר הפעולות ההפוך בלינק

  6. 03:31

    שימוש ב-Lambda Expression

  7. 04:28

    מיון עם OrderBy

  8. 05:04

    קבלת IQueryable מהשאילתה

תמלול ההרצאה: שאילתת LINQ פשוטה מסוג Method-Like

הטקסט המלא של הדקות הראשונות בהרצאה «שאילתת LINQ פשוטה מסוג Method-Like» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אנחנו ב-Entity Framework Core מגיעים לנושא מאוד שימושי מאוד בסיסי בשם Language Integrated Query או בקיצור לינק. מה זה לינק? לינק זה בעצם סדרה של פונקציות שמאפשרות לנו לבצע שאילתות לדאטאבייס.

  2. 00:23

    אם אנחנו נסתכל על מה השאילתות שכבר ביצענו, איזה פעולות כבר עשינו שמאפשרות לבצע פעולות עם הדאטאבייס ב-Entity Framework, הנה אנחנו רואים שהבאנו לדוגמה את כל הרשומות מטבלה, הבאנו רשומה בודדת, הוספנו, עדכנו, מחקנו והרצנו שאילתות raw, שאילתות sql גולמיות כאילו אנחנו מריצים שפת sql רגילה.

  3. 00:49

    כאן עשינו הוספה וכאן עשינו בחירה של מידע. קורה לא מעט שאנחנו רוצים לבצע סלקטים די מורכבים. הנה סלקט שהוא די פשוט אבל יכול להיות סלקטים מאוד מורכבים עם joinים וכדומה.

  4. 01:02

    אם אנחנו באמת רוצים לבצע כתיבה כזאת מורכבת של שאילתות בשפת sql כאשר אנחנו נמצאים בתוך שפת c-sharp אז כמובן זה אפשרי אבל זה לא כזה כיף ולא כזה נוח אין לנו פה אינטליסנס לדוגמה אנחנו לא יודעים אם אנחנו צודקים או טועים בשאילתה עד שלא נריץ אותה ונראה שהיא מכילה שגיאה ובאופן כללי קצת לא כיף ולא נוח ולא אלגנטי להשתמש בטכנולוגיית פיתוח אחת sql

  5. 01:29

    בתוך טכנולוגיית פיתוח אחרת c-sharp יש עוד כל מיני חסרונות לשיטת העבודה הזאת, אז אם אנחנו רוצים לבצע שאילתות קצת יותר מורכבות, שפת לינק באה לעזרתנו.

  6. 01:40

    בואו ניקח את כל הפונקציה הזאת, Display Gifts by Price Range וניגש לפה ונדביק אותה ואנחנו נמצאים בשפת לינק. בואו נקרא לפונקציה שתיים רק כי יש לנו כבר פונקציה כזאת ואנחנו רוצים To display GIFs by price range minimum 10, maximum 40. עד כאן בסדר.

  7. 02:05

    הנה יש לנו פה את ה-context, ואנחנו לא רוצים לבצע שאילתא בשפת SQL native, בשביל זה יש לנו את שפת לינק. אז אני מוחק את כל זה.

  8. 02:16

    אנחנו רוצים to select all from GIFs, where price גדול שווה 10 and price קטן שווה 40 ולמען את זה לפי המחיר. אז אנחנו הולכים לגיפטס ויש לנו כאן כל מיני פונקציות שמאפשרות לנו לבצע את זה לדוגמה יש לנו סלקט בדיוק כמו המילה סלקט לדוגמה יש לנו ור בדיוק כמו המילה ור פרום אני לא צריך מפני שזה פרום גיפטס זה כבר מגיע מהקולקשן

  9. 02:43

    הזה יש לנו פה את המילה אורדר ביי בדיוק כמו שאנחנו רואים כאן זאת אומרת שפת לינק מכילה סדרה של פונקציות שבאות לתת מענה לכל מה שאנחנו רוצים מבחינת שאילתות, אוקיי? יש לנו פה את המילה join לדוגמה שאנחנו נראה בהמשך אם משתמשים איתה.

  10. 03:00

    נראה שאנחנו רוצים לבצע סלקט כי פה מתחיל סלקט אבל שפת לינק עובדת הפוך. שפת לינק אומרת רגע רגע, לפני שאתה עושה סלקט אתה צריך קודם להגיד לי מה ה-collection זה הדבר הראשון מאיזה קולקשן אתה רוצה ואחר כך מה אתה רוצה לנפות ממנו זה ה-where זאת אומרת בשפת לינק קודם כל מתחילים מה-where שהאמת אם תסתכלו על זה זה קצת יותר הגיוני.

  11. 03:23

    קודם כל תגיד לי מה אתה רוצה, שאילתות אתה רוצה, ורק אז תגיד לי מה אתה רוצה לבחור מהם. בוא נגיד ששפת SQL המקורית היא קצת הפוכה מבחינת הסדר, אבל פיין, זה לא משנה, גם שפת SQL עובדת, גם לינק עובדת, אז אנחנו רוצים להגיד שאנחנו רוצים לבצע where.

  12. 03:39

    הפונקציות האלה מקבלות Lambda Expression, כמו שאנחנו מכירים מפונקציות של מערכים לדוגמה, מה שנקרא Higher Order Functions, אלה שמקבלות פונקציות שרצות על ה-Collection ולפי הפונקציות יודעות מה אנחנו רוצים.

  13. 03:53

    אז אנחנו רוצים להביא גיפט ועבור הגיפט אפשר פשוט לקרוא לזה גיפט אפשר g אני אקרא לזה גיפט כרגע ועבור הגיפט שנשלח לפונקציה מה אנחנו רוצים אנחנו רוצים price גדול שווה ל-10 and אנחנו רוצים price קטן שווה ל-40 ואז יש לנו כאן פונקציה שמחזירה עוד קולקשן שנקרא queryable זאת אומרת שאנחנו עוד לא לא סיימנו את ה-query, את השאילתה.

  14. 04:25

    אחרי שאמרנו לו where, אנחנו רוצים להגיד לו, בואו נסתכל כאן בשאילתה הזאת, order by, ועבור כל gift אנחנו רוצים to order by לפי המחיר. אנחנו רואים עוד, תשמע, הנה המחיר לפיו אנחנו רוצים לבצע את המיון.

  15. 04:39

    אם יש לי order by זה סדר עולה, ואם יש לי order by descending זה סדר יורד, הוא מקבל את אותו הדבר. ורק לבסוף אני אומר לו בשפת לינק הזאת, מה אני רוצה to select?

  16. 04:53

    אני רוצה to select עבור כל גיפט, אני רוצה אם יש לי פה כוכבית זה אומר את כל הגיפט כולה. יש לנו פה שאילתה קצת ארוכה וכמובן השאילתה יכולה להיות הרבה יותר ארוכה לכן מה שמקובל לבצע זה לפני כל נקודה לרדת שורה.

  17. 05:11

    ככה רואים את זה קצת יותר ברור בצורה כזאת. כל הדבר הזה אם אני עדיין בתוך ה-where או ה-order by אני מקבל דברים שנקראים queryable או ordered queryable שבעצם השאילתה עוד לא הסתיימה.

  18. 05:27

    אם אני נמצא בתוך סלקט במקרה הזה אז אני גם מקבל queryable אבל ה-select בעצם מחזיר לי כבר תוצאות שאני יכול לרוץ עליהן לכן מה שאני יכול לעשות זה פשוט לקבל כאן משתנה אם אני מסתכל אני רואה שהסוג שלו זה i queryable וה-t result זה מה בעצם ה-select מחזיר לי.

  19. 05:51

    ברמת העיקרון יכלנו להגדיר פה i queryable מסוג גיפט מפני שהוא מחזיר לי גיפט. אני אקרא לזה גיפט. הערה לגבי זה, לא תמיד אנחנו מקבלים i queryable של משהו.

  20. 06:05

    לפעמים אני מקבל משהו קצת אחר, אנחנו נראה את זה בהמשך. לכן מה שכדאי לבצע

לקורס המלא: קורס Entity Framework Core

ההרצאה הקודמת: הסבר על Eager Loading - טעינת כל המידע עם שאילתה אחת

ההרצאה הבאה: שאילתת LINQ פשוטה - מסוג SQL-Like

הרצאות קשורות מקורסים אחרים

  • LINQ
  • הורדה פשוטה - Download
  • LINQ ל- Objects
  • Use Static Method

קורסים נוספים במסלול

  • קורס דוט-נט - NET Core. - עם Rest API
  • קורס ASP.NET
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio