
SqlDataAdapter עם השאילתה שמביאה את כל העמודות מטבלת Customers של Northwind, ועם Connection String (שרת SQL Express, מסד Northwind, Trusted Connection). יוצרים DataSet וממלאים אותו, ונותנים לטבלה את השם Customers.from cast in dsNorthwind.Tables["Customers"].AsEnumerable(). הפונקציה AsEnumerable הופכת את הטבלה לאוסף שאפשר להריץ עליו LINQ.where ניגשים לעמודה עם cast.Field<string>("Country") ובודקים שווה ל-USA. ב-orderby ממיינים לפי CompanyName בסדר יורד.DataRow, ועוברים בלולאה ומדפיסים את CustomerID, CompanyName ו-Country. DataRow מחזיק רשומה אחת מהטבלה, ופונים לעמודות לפי שם. בפלט כולם מ-USA וממוינים יורד.var ופונים לתכונות שהמצאנו.הטקסט המלא של הדקות הראשונות בהרצאה «LINQ ל- Dataset» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אוקיי, אז הדבר הבא שאנחנו הולכים לראות זה Link to Dataset. מה זה אומר? במידה וכבר הבנו נתונים לתוך Dataset בצד של האפליקציה, אנחנו עדיין יכולים להשתמש עם לינק בשביל לבצע שאילת על זה.
בואו נראה איך זה מתבצע. יש לנו פה פרויקט חדש, שוב, Console Application בשביל שיהיה הכי נוח לראות את התחביר. וראשית אנחנו נתחבר למסעד הנתונים Northwind ונביא לנו את הנתונים לתוך Dataset.
אז יש לנו פה בעצם SQL Data Adapter. אנחנו הולכים ליצור אובייקט אדפטר חדש, ולתת לו את תקודת ה-SQL הבאה. תביא לי את כל הנתונים, כל העמודות, מתוך טבלת Customers.
אדפטר צריך גם Connection String, אז בואו נגדיר אותו פה בקוד. אז יש לנו Server שווה נקודה SQL Express, יש לנו Database Northwind, ויש לנו Trusted Connection Troop.
עכשיו אנחנו יכולים להביא את כל הנתונים לתוך אובייקט Data Set Rec. אז בואו נגדיר אובייקט דייטסט, נקרא לו DSNorthwind, וניצור אובייקט דייטסט חדש. עכשיו אנחנו יכולים ללכת לאדאפטר ולאמר לו, תמלא לי בבקשה את השאילתה שיש לך בתוך אובייקט הדייטסט.
ואנחנו יודעים שהטבלה הזאת טבלת Customers. אז בואו נקרא לטבלה הזאת Customers, כמובן יכולים להשתמש פה בשם אחר, כדי שזה רק שם מקומי של המידע בתוך אובייקט הדייטסט.
כעת אנחנו מוכנים לעשות שאילתת לינק על הדייטסט עצמו. אז יש לנו var query שווה from cast in ds Northwind, נקודה. אנחנו רוצים לגשת לטבלת הקסטומרס, אז ניגש לאוסף הטבלאות לתוך טבלה שנקראת קסטומרס, שהמצאנו כרגע, שם שהמצאנו.
ואני רוצה להפוך את זה לקולקשן. אז יש לי את הפונקציה s innumerable שהופכת את זה לקולקשן שניתן לבצע עליו שאילתת לינק. דבר הבא שאנחנו רוצים לעשות זה להגדיר אילו לקוחות לבחור.
אז יש לנו פה את השאלת ה-where, cast, נקודה. אני רוצה לפנות לשדה, אז יש לי field. עכשיו אני צריך לומר למערכת מה הטיפוס של הפילד הזה.
אז יש לנו string. ואז אנחנו אומרים מה בדיוק אנחנו רוצים. אנחנו רוצים לגשת לעמודה שנקראת country נניח, ולבדוק ולהביא רק את אלה שהם שווים ל-USA.
בואו נמעין אותם, order by, cast, field, מטיפוס, string. אנחנו ניגשים ל-CompanyName, עמודה שנקראת CompanyName, ומה שאנחנו רוצים לעשות זה למיין את זה לפי ה-CompanyName, אבל בואו נניח באופן יורד, Descending.
לאחר מכן, אני בוחר את אותם Customers שחזרו לנו מהשליטה. עכשיו אנחנו רוצים לבדוק מה בעצם חזר. אז אני יודע שאנחנו הולכים להפוך את זה ל-List, אבל השאלה, מה הטיפוס של ה-List?
אז יש לנו List, שכל פריט בה הולך להיות DataRow. בואו נהפוך את ה-query ל-tool list, נרוץ ב-for-each על כל הפריטים שחזרו, data row item in results, וכל אחת אנחנו רוצים להציג על המסך.
אז איך אנחנו מציגים? אז יש לנו טבע למסך של item במיקום customer id, נשרשר אליו את item במיקום company name, נשרשר אליו את item במיקום country, וככה אנחנו יכולים לגשת לפריטים השונים. אפשר אפילו במקום item לדעת שאנחנו מתעסקים ברור ולכן נכתוב פה row ואז אולי זה יותר ברור.
מה שקורה זה אוסף התוצאות מכיל לנו data row. data row זה אובייקט שמכיל רשומה אחת בלבד שהייתה קיימת בטבלה שבדייטה סט. כשאנחנו רוצים לפנות לטאב הרשומה אנחנו צריכים פשוט לציין את שם העמודה שאנחנו רוצים עבור אותה רשומה וכך אנחנו מגיעים לפריטים עצמם.
בואו נבדוק את זה. אנחנו רואים כרגע, קודם כל שחזרנו אוסף תוצאות, שכולם גרים ב-USA. כל האוסף הזה ממויין לפי ה-company name, בסדר יורד.
אנחנו רואים פה זה מתחיל ב-W, אחר כך T, אחר כך S וכו' עד G. אז בעצם מה שעשינו זה שאילתה מקומית על דאטה סט מקומי שהבאנו ממסד הנתונים. בואו נראה דוגמה נוספת.
בואו נבנה שאילתה נוספת, נקרא לה Query 2, ואנחנו נחפש כרגע את כל הלקוחות חסרי הפאקס, אלה שאין להם פאקס. בואו נגיד דבר כזה, בואו ניקח את אלה שיש להם פאקס, ואביא יותר גיוני.
from cast in dsNorthwind.tables, שוב פעם אנחנו הולכים ל-customer, נכננו גם לפנות לכל טבלה אחרת אם היינו מספר טבלעות, נקודה as enumerable, נהפוך את זה לאוסף שניתן לבצע עליו שאילתה, וwhere cast.field מטיפוס string, שנקרא fax שונה מנל.
בעמידה וחזר לנו fax שונה מנל, אנחנו מקבלים אותו. אם לא היה fax במסעד הנתונים, כמובן שיש שם נל ואנחנו לא נקבל אותו. בואו עכשיו לצורך הדוגמה, נבחר לא את כל הקסטומר, אלא נבחר רק את ה-ContactName ואת הפאקס עצמו.
אז ניצור טיפוס אנונימי, ונמציא לטיפוס הזה שם פרמטר אחד נקרא ContactName, והוא מכיל את cast.field של string, ואנחנו רוצים את ContactName. בנוסף, יש לנו פאקס, והוא שווה ל-cast.fieldstring של cast של פאקס.