PracticU

שאילתת LINQ מורכבת
מסוג Method-Like

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

שאילתת LINQ מורכבת מסוג Method-Like
שאילתה מורכבת יותר ב-Method-Like: join בין טבלת המתנות לטבלת קבוצות הגיל, סינון, מיון ראשי ומשני ובחירת שדות משתי הטבלאות.
מה השאילתה צריכה לעשות
מחזירה GiftID, שם המתנה, מחיר ושם קבוצת הגיל. מצרפת את Gifts ל-HGroups לפי HGroupId, מסננת מחיר בין 10 ל-40, וממיינת לפי מחיר בסדר יורד ואז לפי שם בסדר עולה.
השלבים העיקריים
1. Join: Join מקבל ארבעה ארגומנטים: האוסף השני (db.HGroups), המפתח באוסף הראשון (gift.HGroupId), המפתח באוסף השני (hGroup.Id), ופונקציה שיוצרת אובייקט אנונימי עם Gift ו-HGroup.
2. למה אובייקט: Where, OrderBy ו-Select מקבלים פרמטר אחד, ובשאילתת join צריך להעביר להם שתי טבלאות. האובייקט הזה (בדוגמה joined) מחזיק את שתיהן.
3. Where: joined.Gift.Price גדול או שווה ל-10 וקטן או שווה ל-40. אפשר לסנן גם לפי עמודות של HGroup, למשל גיל מינימום.
4. מיון: OrderByDescending לפי המחיר, ואחריו ThenBy לפי השם. ThenByDescending נותן מיון משני יורד, וניתן לשרשר ThenBy כמה פעמים.
5. Select: אובייקט אנונימי עם GiftId, GiftName, Price ו-HGroup. אפשר להדפיס אותו ישירות כי יש לו ToString מובנה.
התוצאה היא שלוש רשומות, אותן הרשומות כמו קודם, ועכשיו עם שם קבוצת הגיל.
שימו לב
המרצה מסכם שרמת המורכבות כאן גבוהה, עם הרבה Lambda. לדעתו שפת SQL המקורית קריאה יותר, אבל הוא לא יכתוב אותה בתוך C#. לשאילתות כאלה הוא יעדיף SQL-Like, בהרצאה הבאה.
אחרי ההרצאה תוכלו לכתוב join ב-LINQ בתחביר פונקציות ולהבין למה מועבר אובייקט אחד לשאר הפונקציות.
השיעור הבא בקורס: שאילתת LINQ מורכבת מסוג SQL-Like

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

  1. 00:00

    הצגת השאילתה המורכבת

  2. 01:19

    מיון לפי מחיר ומיון משני

  3. 02:30

    פונקציית join בשיטת Method-Like

  4. 03:04

    הגדרת ה-on בשאילתת join

  5. 04:11

    יצירת אובייקט אנונימי מה-join

  6. 05:47

    העברת האובייקט המאוחד ל-where

  7. 08:14

    סינון לפי טווח מחירים

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

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

  1. 00:02

    נבצע שאילתה הרבה יותר מורכבת מהשאילתה הזאת. נקרא לזה הפעם ארבע. אנחנו בפונקציה מספר ארבע. Gifts by Price Range, מינימום 10, מקסימום 40, יש לנו פה את ה-context, ואנחנו רוצים שאילתה הרבה יותר מורכבת.

  2. 00:20

    בואו נבין רגע מה השאילתה שאנחנו רוצים לראות. אז אנחנו רוצים שאילתת join כזאת, ויש לנו Select, gift.giftid, גיפטס נקודה גיפט איי די, גיפטס נקודה ניים אז גיפט ניים, גיפטס נקודה פרייס וזה בסדר ואנחנו רוצים גם את h-group אז יש לנו פה h-groups נקודה ניים ונקרא לו h-group.

  3. 00:53

    כל זה אנחנו רוצים from gifts join h-groups זה בעצם שמות של טבלאות זה גיפטס בצורה כזאת ו-h-groups זה טבלה ויש לנו פה gift join h-groups where יש לנו פה את ה-where שביצענו, price אז זה gifts.price יש לנו כאן עוד פעם gifts.price לבסוף יש לנו order by gifts.price בצורה כזאת יש לנו אפילו בוא נעשה אותו קצת יותר מורכבת

  4. 01:35

    Order by Gifts Descending וזה עושה לנו בסדר יורד ונעשה מיון משני אפילו. מזכיר לכם מיון משני אם יש לי כמה רישומות עם אותו הפרייס אז בינם לבין עצמם איך אנחנו רוצים למיין.

  5. 01:51

    אז בואו נגדיר שהמיון המשני הוא יהיה מיון לפי ה-Gifts.Name בסדר עולה אז אני לא צריך פה לרשום ASC זה בסדר עולה ואני רוצה to select כמו שאמרתי רק את החבר'ה האלה. אז אנחנו רואים פה כבר שאילתה הרבה יותר מורכבת, כמובן שיש שאילתות הרבה יותר מורכבות מזאת, אבל היא כבר ברמה יותר גבוהה.

  6. 02:13

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

  7. 02:24

    לאחר מכן אנחנו רוצים לבצע את הג'וין. כל אחת מהפונקציות האלה מקבלות שוב איזשהו למדה אקספרשן כזה, ויכול להיות שהן מקבלות גם יותר פרמטרים. אז join אומר תקשיב בוא תגיד לי לפי איזה טבלה נוספת או קולקשן נוסף אתה רוצה לבצע את ה-join שלך זה יהיה db.h groups פה אני נותן את הקולקשן

  8. 02:47

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

  9. 03:11

    האמת שאני רואה ששכחתי כאן למעלה את ה-on gifts.hgroupid שווה ל-hgroups.hgroupid. זה ה-on שיש לנו בשאילתת join. אז אני אומר לו, תשמע, עבור כל גיפט יש לי h-group-id ואני רוצה שתשווה אותו.

  10. 03:40

    וכבר אנחנו רואים שיש לנו כאן את החלק הזה. From, גיפט נמצא פה, join h-groups נמצא פה, ואנחנו מתחילים עם ה-on. אנחנו אומרים לו עבור כל גיפט, אנחנו רוצים שתשווה את ה-h-group-id הזה ל-id הזה שלו, של ה-h-group.

  11. 03:59

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

  12. 04:20

    זאת אומרת, יש לנו פה פונקציה נוספת שאנחנו נותנים והמערכת הולכת לקרוא לה ולשלוח את שני החבר'ה האלה ואז אנחנו אנחנו אומרים לו מה האובייקט שאנחנו רוצים להחזיר.

  13. 04:34

    אנחנו רוצים להחזיר אובייקט שמכיל שני פרמטרים. הוא מכיל את ה-gift ואת ה-age group. מה זה האובייקט המוזר הזה? למה יש פה כל כך הרבה דברים שאנחנו מעבירים לפונקציית join?

  14. 04:49

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

  15. 05:05

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

  16. 05:22

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

  17. 05:51

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

  18. 06:04

    שני החברה האלה זה החלק של ה-on מי אנחנו רוצים להשוות למי אנחנו רוצים להשוות עבור כל gift at h-group ID שהוא ה-ID של h-group זה הגיוני לגמרי זה בדיוק כמו ה-on הזה. כל הארגומנט האחרון זה אובייקט שאנחנו בעצם מייצרים והוא זה שהולך להישלח לכאן זאת אומרת מכל gift של גיפט ו-H Group של טבלת ה-H Groups, אנחנו מייצרים אובייקט אנונימי חדש.

  19. 06:37

    וכמובן שיכולנו לשנות פה את השמות ולהגדיר שאלה יהיו שמות אחרים, G שווה ו-A שווה, אבל בכוונה אני רוצה להשאיר את השמות, כי להשתמש בשם גיפט ו-H Group זה קצת יותר ברור.

  20. 06:51

    אז האובייקט הזה הולך להישלח לכאן, ושימו לב שיש לו שני פרמטרים, גיפט ו-H Group. זאת אומרת שכאן ב-where אנחנו לא מקבלים גיפט ואנחנו לא מקבלים h-group.

  21. 07:04

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

  22. 07:24

    אם נניח הייתי משנה את השמות האלה לדוגמא מיי גיפט ומיי אייג' גרופ שווה, אז הג'וין היה מכיל את מיי גיפט ואת מיי אייג' גרופ, כי אנחנו בסופו של דבר רוצים שבווייר ובאורדר ביי ובסלקט יהיה לנו גם את הגיפט אובייקט מהקולקשן הזה וגם אייג' גרופ מהקולקשן הזה,

  23. 07:39

    כי אנחנו מתעסקים בג'וין. אז אלו האובייקטים הנה הגיפט מהי גיפט והנה האובייקט שמתאר כל פריט מטבלת ה-H Groups אני לא אקרא להם מי שם קצת פחות נכון בגלל זה השארתי את זה באותו השם אבל הבנו את הקשר בין השמות אז מה אנחנו רוצים to select סליחה מה אנחנו רוצים to wear אנחנו רוצים ב-wear להביא לפי המחיר כמו שעשינו מקודם הנה בין 10 ל-40.

  24. 08:20

    מטבלת ה-Gifts אנחנו רוצים שהאובייקט GiftPrice יהיה גדול שווה ל-10. And מטבלת JoinGift אנחנו רוצים שה-Price יהיה קטן שווה ל-40.

  25. 08:37

    שימו לב שיכלנו להוסיף גם מידע שקשור לטבלת

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

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

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

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

  • LINQ
  • LINQ ל- Objects
  • Use Static Method
  • Page Object Design עם Method By

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

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