
display one gift, וקוראים ל-db.gifts עם פונקציה (ביטוי) שבודקת id שווה ל-ID שביקשנו. מאחורי הקלעים נבנית שאילתת SQL, ולא נטענים כל הנתונים לזיכרון לפני החיפוש.Single: מחזירה פריט אחד ויחיד. אם אין פריט (ID 10) המערכת קורסת, ואם יש יותר מאחד (למשל ID גדול מ-1) היא קורסת עם ההודעה sequence contains more than one element.SingleOrDefault: מחזירה null כשאין פריט, ולכן בודקים if על null ומציגים הודעה no such gift. אם יש יותר מפריט אחד מתאים, היא עדיין קורסת.First: מחזירה את הפריט הראשון מבין כמה מתאימים, ולכן אין קריסה על ריבוי פריטים. אם אין אף פריט היא קורסת עם sequence contains no element.FirstOrDefault: מחזירה null כשאין פריט, ולא קורסת בשום מקרה.Single ל-SingleOrDefault. Single מתאימה כשבטוח שהפריט קיים. כשאפשר שהפריט נמחק, למשל מתנה שכבר לא בחנות, נהוג להשתמש ב-SingleOrDefault. First ו-FirstOrDefault נדירות יותר בעבודה עם מזהים.הטקסט המלא של הדקות הראשונות בהרצאה «הצגת פריט בודד SingleOrDefault» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אז איך אנחנו מציגים מתנה אחת ספציפית? בואו נעתיק את הפונקציה display all gifts ונקרא לה display one gift. קודם כל נראית פה איזושהי שורה אולי ויש לנו single gift.
אנחנו רוצים להציג רק מתנה אחת. כמובן יש לנו פה את אובייקט הקונטקסט שאנחנו פותחים עם using בכדי שהמערכת תבצע dispose אוטומטית אבל אנחנו לא צריכים את זה. נוריד רגע את זה.
מה אנחנו כן רוצים? דבר ראשון בדרך כלל כשאנחנו מביאים מתנה בודדת אנחנו רוצים להביא לפי ID אז נניח שיש לי פה את ה-ID 1 אנחנו רוצים לקרוא ל-db.gifts ועכשיו יש לנו מספר פונקציות שמאפשרות להביא פריט בודד.
נתחיל עם סינגל סינגל באה ואומרת לי אני מביאה לך פריט בודד תן לי פונקציה אתה יכול לתת לי פה פונקציה מסוימת אקספרשן שאני אקרא לה אם הפונקציה שלך תחזיר לי true אז זה הפריט שאתה רוצה אני אביא לך אותו.
פונקציה מחזירה false אני אלך לפריט הבא שברשימה שבטבלה. מאחורי הקלעים כמובן שהפונקציה מייצרת שאילתת sql לדאטאבייס לפי הפונקציה שכתבתי הם לא מביאים את כל המידע מהדאטאבייס ואז מתחילים לחפש עליו זה יהיה טיפשי יכול להיות שבדאטאבייס יש לי מיליוני רשומות
אז אני רוצה לתת איזושהי פונקציה שמתעסקת עם ה-id אז בואו נגדיר מה שנקרא higher order function. higher order function זה אותן פונקציות שבדרך כלל קוראים להן בצורה כזאת, ששולחים לכל מיני פונקציות שקוראות להן בשביל להגיד להם מה אנחנו רוצים לבצע.
עבור כל gift אנחנו רוצים שתביא לי רק אם ה-id שווה ל-id שכתבתי כאן. כמובן שיכלתי פשוט לרשום פה את המספר 1, זה גם בסדר.
מה פונקציה single עושה? פונקציית סינגל מחזירה לנו מתנה ובואו אנחנו רוצים לראות מה קורה אם אנחנו מציגים אותה. בואו ניקח בעצם את השורה הזאת שלנו ונשתמש בה בשביל להציג את המתנה כי זה בדיוק מה שהיא עושה.
ניקח את הפונקציה אני לא רוצה להציג כרגע את כל המתנות אני רוצה להציג רק מתנה אחת בואו נריץ סינגל גיפט איי די אחד הנה הנם הנה הפרייס עובד פרפקט, בואו ננסה ID 2, נריץ ויש לנו את המתנה השנייה, עד כאן זה בסדר.
בואו ננסה ID 10, אנחנו יודעים שאין לנו מתנה כזאת ושימו לב שהמערכת קורסת. אנחנו לא רוצים שמערכות יקרסו כמובן, אבל זה הקטע בסינגל, סינגל באה ואומרת אני מבחינתי חייב להיות פריט אחד ויחיד.
גם אם יש מספר פריטים שהם יותר מאחד אני גם אקרוס מה זאת אומרת נניח שאני בא ואני אומר איי-די אחד אבל אני רוצה שהאיי-די יהיה יותר גדול מי עונה על התנאי הזה איי-די מספר 2 מספר 3 ואם יש לי עוד נכון בואו נריץ את זה ונראה שהמערכת קורסת sequence contains more than one element זאת אומרת שאם אנחנו קוראים לסינגל זה זה אומר שאנחנו מבחינתנו יודעים בוודאות שא' הפריט קיים,
ב' הוא קיים פעם אחת בלבד. תזכרו את זה, נחזיר את זה לשווה. הפונקציה הבאה בתור שגם הביאנו פריט בודד ב-NTT framework זה single or default.
single or default אומרת, תשמעו, לא בטוח שיהיה פריט. אולי אין, אולי אתה נותן לי אחד והוא לא קיים.
לכן מה שהוא אומר לי, תשמע, אני יכול להחזיר לך גם נ"ל. אז בואו נגדיר שהגיפט זה נלאבל וניפטר מההערה הזאת שיש פה.
לכן אנחנו רוצים לבצע איזושהי בדיקה ולא לבצע את ההדפסות במידה והפריט לא קיים. אז אולי נעשה פה איזה if מסוים אם גיפט שווה לנל אז תציג לי איזושהי הודעה no such gift ואל תמשיך הלאה נצא בחזרה מהפונקציה.
אם עברנו את זה בהצלחה תציג לי אז single or default אומרת יש רק אחד אבל לא חייב להיות בואו נראה אני מריץ ויש לנו כרגע מתנה אחת שזה ה-id שלה אז הכל בסדר ניתן לו 10 והוא אומר no such gift אבל הוא לא קרס כמו מקודם מה יקרה אם נחזיר את זה לאחד ונגיד לו תביא לי את כל אלה שהם ה-id שלהם גדולים יותר מאחד אז הוא כמובן יקרוס מפני שהוא אומר לנו sequence contains more than one element.
הפלנו בבעיה אחת, כלומר לא חייב להיות, אבל אם יש, אז חייב להיות אחד ויחיד. הפונקציה הבאה בתור שמביאה לנו פריט בודד נקראת first.
first אומרת אני רק בודק שיש פריט כזה, יכול להיות יותר מאחד, אבל אני אביא לך את