PracticU

LINQ ל- Dataset

בלי כתוביותעם כתוביות
PracticU › קורס ADO.NET - חיבור אתר למסד נתונים › LINQ ל- Dataset
מילון מושגים:
LINQ - יכולת ב-.NET לכתוב שאילתות על אוספים ומקורות נתונים ישירות בתוך קוד C# בתחביר אחיד.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
Northwind - מסד נתונים לדוגמה של מיקרוסופט, המדמה חברת מסחר ומשמש ללימוד ולהדגמת שאילתות SQL.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
רשומה - שורה בטבלת מסד נתונים שמרכזת את כל השדות של פריט אחד, למשל כל הפרטים של לקוח יחיד.

LINQ ל- Dataset
יש כבר DataSet מלא בנתונים בצד האפליקציה, ורוצים לסנן ולמיין אותו בלי לפנות שוב למסד הנתונים. בהרצאה מבצעים שאילתות LINQ על DataSet מקומי באפליקציית Console.
השלבים העיקריים
1. מילוי ה-DataSet: יוצרים SqlDataAdapter עם השאילתה שמביאה את כל העמודות מטבלת Customers של Northwind, ועם Connection String (שרת SQL Express, מסד Northwind, Trusted Connection). יוצרים DataSet וממלאים אותו, ונותנים לטבלה את השם Customers.
2. מקור השאילתה: כותבים from cast in dsNorthwind.Tables["Customers"].AsEnumerable(). הפונקציה AsEnumerable הופכת את הטבלה לאוסף שאפשר להריץ עליו LINQ.
3. סינון ומיון: ב-where ניגשים לעמודה עם cast.Field<string>("Country") ובודקים שווה ל-USA. ב-orderby ממיינים לפי CompanyName בסדר יורד.
4. הצגת התוצאה: ממירים ל-List של DataRow, ועוברים בלולאה ומדפיסים את CustomerID, CompanyName ו-Country. DataRow מחזיק רשומה אחת מהטבלה, ופונים לעמודות לפי שם. בפלט כולם מ-USA וממוינים יורד.
5. שאילתה שנייה עם טיפוס אנונימי: בוחרים את הלקוחות שה-Fax שלהם שונה מ-null, ומחזירים רק ContactName ו-Fax בטיפוס אנונימי. כי הטיפוס אנונימי, אי אפשר להחזיר ל-List מוגדר, ולכן משתמשים ב-var ופונים לתכונות שהמצאנו.
שימו לב
- שימוש ב-null במקום ב"שונה מ-null" היה מחזיר רק את אלה שאין להם פקס.
- אם כבר עובדים עם LINQ to SQL אין צורך ב-LINQ to DataSet, כי אפשר להביא את הנתונים הרצויים כבר בשאילתה.
- הרעיון שימושי כשבאתר כבר יש DataSet קיים ורוצים שאילתה פשוטה, בלי קריאה נוספת למסד הנתונים.
אחרי ההרצאה אפשר להריץ שאילתות LINQ על DataSet מקומי. הנושא הבא הוא LINQ to Entities.
השיעור הבא בקורס: LINQ ל- Entities

פרקי ההרצאה: LINQ ל- Dataset

  1. 00:00

    ביצוע שאילתה על Dataset

  2. 00:40

    הבאת נתונים עם SqlDataAdapter

  3. 01:55

    שאילתת LINQ על ה-Dataset

  4. 02:37

    סינון לפי מדינה

  5. 03:18

    מיון לפי CompanyName

  6. 03:56

    המרה ל-List של DataRow

  7. 06:11

    שאילתה לפי שדה פאקס

  8. 07:39

    בחירת טיפוס אנונימי

תמלול ההרצאה: LINQ ל- Dataset

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

  1. 00:01

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

  2. 00:16

    בואו נראה איך זה מתבצע. יש לנו פה פרויקט חדש, שוב, Console Application בשביל שיהיה הכי נוח לראות את התחביר. וראשית אנחנו נתחבר למסעד הנתונים Northwind ונביא לנו את הנתונים לתוך Dataset.

  3. 00:29

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

  4. 00:53

    אדפטר צריך גם Connection String, אז בואו נגדיר אותו פה בקוד. אז יש לנו Server שווה נקודה SQL Express, יש לנו Database Northwind, ויש לנו Trusted Connection Troop.

  5. 01:17

    עכשיו אנחנו יכולים להביא את כל הנתונים לתוך אובייקט Data Set Rec. אז בואו נגדיר אובייקט דייטסט, נקרא לו DSNorthwind, וניצור אובייקט דייטסט חדש. עכשיו אנחנו יכולים ללכת לאדאפטר ולאמר לו, תמלא לי בבקשה את השאילתה שיש לך בתוך אובייקט הדייטסט.

  6. 01:45

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

  7. 01:59

    כעת אנחנו מוכנים לעשות שאילתת לינק על הדייטסט עצמו. אז יש לנו var query שווה from cast in ds Northwind, נקודה. אנחנו רוצים לגשת לטבלת הקסטומרס, אז ניגש לאוסף הטבלאות לתוך טבלה שנקראת קסטומרס, שהמצאנו כרגע, שם שהמצאנו.

  8. 02:26

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

  9. 02:41

    אז יש לנו פה את השאלת ה-where, cast, נקודה. אני רוצה לפנות לשדה, אז יש לי field. עכשיו אני צריך לומר למערכת מה הטיפוס של הפילד הזה.

  10. 02:56

    אז יש לנו string. ואז אנחנו אומרים מה בדיוק אנחנו רוצים. אנחנו רוצים לגשת לעמודה שנקראת country נניח, ולבדוק ולהביא רק את אלה שהם שווים ל-USA.

  11. 03:14

    בואו נמעין אותם, order by, cast, field, מטיפוס, string. אנחנו ניגשים ל-CompanyName, עמודה שנקראת CompanyName, ומה שאנחנו רוצים לעשות זה למיין את זה לפי ה-CompanyName, אבל בואו נניח באופן יורד, Descending.

  12. 03:42

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

  13. 03:59

    אז יש לנו List, שכל פריט בה הולך להיות DataRow. בואו נהפוך את ה-query ל-tool list, נרוץ ב-for-each על כל הפריטים שחזרו, data row item in results, וכל אחת אנחנו רוצים להציג על המסך.

  14. 04:31

    אז איך אנחנו מציגים? אז יש לנו טבע למסך של item במיקום customer id, נשרשר אליו את item במיקום company name, נשרשר אליו את item במיקום country, וככה אנחנו יכולים לגשת לפריטים השונים. אפשר אפילו במקום item לדעת שאנחנו מתעסקים ברור ולכן נכתוב פה row ואז אולי זה יותר ברור.

  15. 05:26

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

  16. 05:47

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

  17. 06:03

    אנחנו רואים פה זה מתחיל ב-W, אחר כך T, אחר כך S וכו' עד G. אז בעצם מה שעשינו זה שאילתה מקומית על דאטה סט מקומי שהבאנו ממסד הנתונים. בואו נראה דוגמה נוספת.

  18. 06:19

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

  19. 06:40

    from cast in dsNorthwind.tables, שוב פעם אנחנו הולכים ל-customer, נכננו גם לפנות לכל טבלה אחרת אם היינו מספר טבלעות, נקודה as enumerable, נהפוך את זה לאוסף שניתן לבצע עליו שאילתה, וwhere cast.field מטיפוס string, שנקרא fax שונה מנל.

  20. 07:20

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

  21. 07:39

    אז ניצור טיפוס אנונימי, ונמציא לטיפוס הזה שם פרמטר אחד נקרא ContactName, והוא מכיל את cast.field של string, ואנחנו רוצים את ContactName. בנוסף, יש לנו פאקס, והוא שווה ל-cast.fieldstring של cast של פאקס.

לקורס המלא: קורס ADO.NET אונליין

ההרצאה הקודמת: LINQ ל- XML

ההרצאה הבאה: LINQ ל- Entities

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

  • LINQ
  • שאילתת LINQ - על אוספים רגילים

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

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס תכנות מתקדם - #Advanced .NET C
  • קורס WCF - תקשורת למתקדמים בדוט-נט