On this page
מערך שיעור: LINQ חלק ב' — GroupBy, FirstOrDefault
משך: 2 שעות אקדמיות (90 דקות).
מטרת השיעור: הסטודנטים ידעו לקבץ נתונים לפי קטגוריה ולשלוף איבר בודד בבטחה, כהכנה ישירה לפרויקט המסכם.
בסוף השיעור הסטודנטים צריכים: להשתמש ב-GroupBy עם foreach מקונן, להעדיף FirstOrDefault על First כשההתאמה לא מובטחת, ולשלב GroupBy+Count/Average לסטטיסטיקות.
דגש קריטי: זהו השיעור האחרון לפני הפרויקט המסכם (Naive Bayes) — הדגישו במפורש ש-GroupBy הוא בדיוק הכלי שישמש לספירת תדירויות שם.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה וחיבור | 5 דקות | שאלו: “כמה תלמידים בכל מחלקה? Where/Select לבד עוזרים?” |
| הרעיון: GroupBy | 20 דקות | קיבוץ + foreach מקונן, הדגישו .Key |
| הבעיה: First קורס | 10 דקות | הדגימו InvalidOperationException על חיפוש לא-קיים |
| הרעיון: FirstOrDefault | 15 דקות | אותו חיפוש, בטוח |
| שילוב GroupBy+Count/Average | 15 דקות | סטטיסטיקות לפי קבוצה |
| קישור לפרויקט Naive Bayes | 10 דקות | הסבירו איך GroupBy ישמש לספירת תדירויות מילים |
| תרגול מודרך | 15 דקות | תרגיל 1+2 |
דגשים להעברת השיעור
- זהו שיעור-הכנה ישיר לפרויקט המסכם — קשרו במפורש: “מחר תבנו מסווג שסופר כמה פעמים כל מילה מופיעה בכל קטגוריה — זה בדיוק GroupBy+Count שעשיתם היום”.
foreachמקונן על תוצאתGroupByהוא נקודת הבלבול העיקרית — תנו לזה זמן, הדגימו שלב-שלב מהgroupו-group.Keyמייצגים.- הדגמת הקריסה של
First(InvalidOperationException בשידור חי) משכנעת יותר מכל הסבר על “למה FirstOrDefault עדיף”.
מושגים
GroupBy — קיבוץ איברים לפי מפתח, מחזיר קבוצות עם .Key.
First — מחזיר איבר ראשון תואם; זורק חריגה אם אין.
FirstOrDefault — כמו First, בטוח — מחזיר null/ברירת מחדל.
תרגיל חשיבה
שאלת פתיחה: “אתם בונים מסווג ספאם שסופר כמה פעמים המילה ‘חינם’ מופיעה במיילים ‘ספאם’ לעומת מיילים ‘תקינים’. איזה כלי מה-LINQ שלמדתם היום הכי מתאים לזה, ולמה?”
מהלך: הובילו את הסטודנטים לזהות ש-GroupBy (לפי סיווג המייל: ספאם/תקין) בשילוב עם ספירה (Count) בתוך כל קבוצה הוא בדיוק המנגנון הדרוש. זו הכנה ישירה ומכוונת לפרויקט Naive Bayes שמגיע מיד אחרי.
מה המרצה מראה בסוף: הריצו דוגמה זעירה — רשימת מילים עם תיוג (“spam”/“ham”), GroupBy לפי התיוג, וספירה של מופעי מילה ספציפית בתוך כל קבוצה עם Count(w => w == "free"). זו בדיוק הלבנה הראשונה של הפרויקט המסכם שמגיע מיד בשיעור הבא.