כתיבת שאילתות ב-C# LINQ

Ktybt S Yltwt B C Linq



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

תחביר שאילתה:

בואו נסתכל על התחביר הגנרי:

מ איטרטור ב מקור מידע
בחר איטרטור ;

כאן:







  1. ה-Data_Source יכול להיות הרשימה שמחזיקה את הנתונים.
  2. האיטרטור משמש כדי להביא את האלמנטים מ-Data_Source.

מקור מידע

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



באמצעות מערכת ;
באמצעות מערכת.אוספים.גנרי ;
באמצעות System.Linq ;
באמצעות מערכת.אוספים ;

פּוּמְבֵּי מעמד חישובים
{
פּוּמְבֵּי סטָטִי בָּטֵל רָאשִׁי ( )
{
// יצירת רשימה
רשימת מחירי מדינה = חָדָשׁ רשימה ( ) {

// הוסף 5 רשומות לרשימה
חָדָשׁ מחירים ( ) { פריט = 'פירות' ,מקום = 'ארה'ב' , כמות = 100 , עלות = 345.78 } ,
חָדָשׁ מחירים ( ) { פריט = 'אֱגוֹזִים' ,מקום = 'הוֹדוּ' , כמות = 200 , עלות = 3645.78 } ,
חָדָשׁ מחירים ( ) { פריט = 'אחרים' ,מקום = 'בְּרִיטַנִיָה' , כמות = 500 , עלות = 90.68 } ,
חָדָשׁ מחירים ( ) { פריט = 'שמן' ,מקום = 'ארה'ב' , כמות = 100 , עלות = 345.78 } ,
חָדָשׁ מחירים ( ) { פריט = 'צ'ילי' ,מקום = 'ארה'ב' , כמות = 10 , עלות = 67.89 } ,
} ;


לכל אחד ( היה אני ב מדינה_מחירים )
{
לְנַחֵם . WriteLine ( אני . פריט + '' + אני . מקום + '' + אני . כַּמוּת + '' + אני . עֲלוּת ) ;
}
}
}
פּוּמְבֵּי מעמד מחירים {
פּוּמְבֵּי חוּט פריט { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי חוּט מקום { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי int כַּמוּת { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי לְהַכפִּיל עֲלוּת { לקבל ; מַעֲרֶכֶת ; }
}

רשומות:







הֶסבֵּר:

1. צור את המחירים עם המאפיינים הבאים:

2. צור מחלקה נוספת שהיא 'Calculations' עם השיטה הראשית וצור את רשימת country_prices עם חמש רשומות.



בחר

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

תחביר:

כל התכונות: מהאיטרטור ב-Data_Source בחר איטרטור;

תכונה ספציפית: מתוך איטרטור ב-Data_Source בחר iterator.attribute;

דוגמה 1:

בואו נכתוב שאילתה כדי לבחור את כל הרשומות מהרשימה.

באמצעות מערכת ;
באמצעות מערכת.אוספים.גנרי ;
באמצעות System.Linq ;
באמצעות מערכת.אוספים ;

פּוּמְבֵּי מעמד חישובים
{
פּוּמְבֵּי סטָטִי בָּטֵל רָאשִׁי ( )
{
// יצירת רשימה
רשימת מחירי מדינה = חָדָשׁ רשימה ( ) {

// הוסף 5 רשומות לרשימה
חָדָשׁ מחירים ( ) { פריט = 'פירות' ,מקום = 'ארה'ב' , כמות = 100 , עלות = 345.78 } ,
חָדָשׁ מחירים ( ) { פריט = 'אֱגוֹזִים' ,מקום = 'הוֹדוּ' , כמות = 200 , עלות = 3645.78 } ,
חָדָשׁ מחירים ( ) { פריט = 'אחרים' ,מקום = 'בְּרִיטַנִיָה' , כמות = 500 , עלות = 90.68 } ,
חָדָשׁ מחירים ( ) { פריט = 'שמן' ,מקום = 'ארה'ב' , כמות = 100 , עלות = 345.78 } ,
חָדָשׁ מחירים ( ) { פריט = 'צ'ילי' ,מקום = 'ארה'ב' , כמות = 10 , עלות = 67.89 } ,
} ;

//בחר אופרטור בשאילתה
היה נתונים = מ אני ב מדינה_מחירים
בחר אני ;

לכל אחד ( היה אני ב נתונים )
{
לְנַחֵם . WriteLine ( אני . פריט + '' + אני . מקום + '' + אני . כַּמוּת + '' + אני . עֲלוּת ) ;

}
}
}
פּוּמְבֵּי מעמד מחירים {
פּוּמְבֵּי חוּט פריט { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי חוּט מקום { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי int כַּמוּת { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי לְהַכפִּיל עֲלוּת { לקבל ; מַעֲרֶכֶת ; }
}

תְפוּקָה:

כאן, לא ציינו תכונה כלשהי בשאילתת 'בחר'. הבאנו את כל התכונות מהשאילתה (נתונים) בתוך לולאת 'foreach' באמצעות האיטרטור.

דוגמה 2:

כעת, קבל את הפריטים על ידי ציון תכונת הפריט בתוך האופרטור 'בחר'. השאילתה היא ' מ-i in country_prices בחר i.item '.

//בחר באופרטור כדי לקבל תכונה פריט בשאילתה
היה נתונים = מ אני ב מדינה_מחירים
בחר אני . פריט ;

לכל אחד ( היה אני ב נתונים )
{
לְנַחֵם . WriteLine ( אני ) ;

}

תְפוּקָה:

שורה מס' 21 - שורה מס' 29:

2. איפה

אם אתה רוצה לסנן את הנתונים על סמך תנאים מסוימים, אתה יכול להשתמש באופרטור 'where' בשאילתה יחד עם סעיף 'בחר'. אבל תחילה נעשה שימוש באופרטור 'היכן' ולאחר מכן מצוין אופרטור הבחירה.

תחביר:

בואו נראה כיצד להשתמש באופרטור 'where' בתוך שאילתת LINQ.

מ איטרטור ב מקור מידע
איפה מַצָב / ס
בחר איטרטור . תְכוּנָה ;

דוגמה 1: מצב יחיד

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

השאילתה היא ' מ-i במחירי_ארץ
where i.item == 'צ'ילי'
בחר ב'

//בחר היכן לסנן רשומות
היה נתונים = מ אני ב מדינה_מחירים
איפה אני . פריט == 'צ'ילי'
בחר אני ;

לכל אחד ( היה אני ב נתונים )
{
לְנַחֵם . WriteLine ( אני . פריט + '' + אני . מקום + '' + אני . כַּמוּת + '' + אני . עֲלוּת ) ;

}

תְפוּקָה:

יש רק תקליט אחד עם הפריט 'צ'ילי'.

שורה מס' 21 - שורה מס' 30:

דוגמה 2: תנאים מרובים

בואו נסנן את הרשומות על סמך תכונות המיקום והכמות. הכמות צריכה להיות גדולה מ-50 ופחות מ-300. המיקום צריך להיות 'ארה'ב'.

השאילתה היא ' מ-i במחירי_ארץ
כאשר i.quantity > 50
שבו i.quantity < 300
שבו i.location == 'ארה'ב'
בחר ב'

//בחר היכן לסנן רשומות על ידי ציון תנאים מרובים
היה נתונים = מ אני ב מדינה_מחירים
איפה אני . כַּמוּת > חמישים
איפה אני . כַּמוּת < 300
איפה אני . מקום == 'ארה'ב'
בחר אני ;

לכל אחד ( היה אני ב נתונים )
{
לְנַחֵם . WriteLine ( אני . פריט + '' + אני . מקום + '' + אני . כַּמוּת + '' + אני . עֲלוּת ) ;

}

תְפוּקָה:

ישנם שני שיאים שתואמים את התנאים הקודמים.

שורה מס' 21 - שורה מס' 32:

דוגמה 3: וגם (&&) מפעיל

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

בדוגמה זו, אנו בוחרים את הרשומות אם הכמות גדולה מ-20 והעלות היא 67.89.

השאילתה היא ' מ-i במחירי_ארץ
כאשר i.quantity < 20 && i.cost == 67.89
בחר ב'

היה נתונים = מ אני ב מדינה_מחירים
איפה אני . כַּמוּת < עשרים && אני . עֲלוּת == 67.89
בחר אני ;

לכל אחד ( היה אני ב נתונים )
{
לְנַחֵם . WriteLine ( אני . פריט + '' + אני . מקום + '' + אני . כַּמוּת + '' + אני . עֲלוּת ) ;

}

תְפוּקָה:

יש רק רשומה אחת עם כמות שהיא פחות מ-20 ובעלות של 67.89

שורה מס' 21 - שורה מס' 29:

דוגמה 4: או (||) מפעיל

האופרטור 'או (||)' משמש גם לציון תנאים מרובים בו-זמנית. אם לפחות תנאי אחד מתקיים, הרשומות שעומדות בתנאי זה יוחזרו.

בדוגמה זו, אנו בוחרים את הרשומות אם הכמות גדולה מ-300 או שהמיקום הוא 'טוקיו'.

השאילתה היא ' מ-i במחירי_ארץ
שבו i.quantity > 300 || i.location == 'טוקיו'
בחר ב'

היה נתונים = מ אני ב מדינה_מחירים
איפה אני . כַּמוּת > 300 || אני . מקום == 'טוקיו'
בחר אני ;

לכל אחד ( היה אני ב נתונים )
{
לְנַחֵם . WriteLine ( אני . פריט + '' + אני . מקום + '' + אני . כַּמוּת + '' + אני . עֲלוּת ) ;

}

תְפוּקָה:

יש רק רשומה אחת עם כמות גדולה מ-300 (התנאי הראשון מותאם).

שורה מס' 21 - שורה מס' 29:

3. הזמן לפי

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

תחביר:

בואו נראה כיצד להשתמש באופרטור 'סדר לפי' בתוך שאילתת LINQ.

בסדר עולה:

מ איטרטור ב מקור מידע
להזמין על ידי איטרטור . תְכוּנָה עולה
בחר איטרטור ;

סדר יורד:

מ איטרטור ב מקור מידע
להזמין על ידי איטרטור . תְכוּנָה יורד
בחר איטרטור ;

דוגמה 1: בסדר עולה

בחר את כל התכונות ממקור הנתונים (רשימה) והחזר אותן בסדר עולה על סמך הערכים בתכונת הכמות.

השאילתה היא ' מ-i במחירי_ארץ
סדר לפי i.כמות עולה
בחר ב'

היה נתונים = מ אני ב מדינה_מחירים
הזמנה מאת i . כַּמוּת עולה
בחר אני ;

לכל אחד ( היה אני ב נתונים )
{
לְנַחֵם . WriteLine ( אני . פריט + '' + אני . מקום + '' + אני . כַּמוּת + '' + אני . עֲלוּת ) ;

}

תְפוּקָה:

שורה מס' 21 - שורה מס' 29:

דוגמה 2: סדר יורד

בחר את כל המאפיינים ממקור הנתונים (רשימה) והחזר אותם בסדר יורד על סמך הערכים בתכונת העלות.

השאילתה היא ' מ-i במחירי_ארץ
orderby i.cost descending
בחר ב'

היה נתונים = מ אני ב מדינה_מחירים
הזמנה מאת i . עֲלוּת יורד
בחר אני ;

לכל אחד ( היה אני ב נתונים )
{
לְנַחֵם . WriteLine ( אני . פריט + '' + אני . מקום + '' + אני . כַּמוּת + '' + אני . עֲלוּת ) ;

}

תְפוּקָה:

שורה מס' 21 - שורה מס' 29:

4. הגבלה

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

תחביר:

( מ איטרטור ב מקור מידע
בחר איטרטור ) . לדלג ( נ ) . לקחת ( נ ) ;
  1. Skip() משמש כדי לדלג על הרשומות ולהחזיר את הרשומות הנותרות. זה דורש מספר שלם שמציין את מספר האלמנטים שיש לדלג עליהם. במקרה שלנו זה 0.
  2. Take() משמש להוצאת מספר 'n' של רשומות מהרשומה הראשונה.

דוגמא:

בחר את שלוש הרשומות הראשונות מתוך חמש רשומות המוחזרות על ידי השאילתה.

השאילתה היא ' (מאת i ב-country_prices
בחר i).Skip(0).Take(3)'

היה נתונים = ( מ אני ב מדינה_מחירים
בחר אני ) . לדלג ( 0 ) . לקחת ( 3 ) ;

לכל אחד ( היה אני ב נתונים )
{
לְנַחֵם . WriteLine ( אני . פריט + '' + אני . מקום + '' + אני . כַּמוּת + '' + אני . עֲלוּת ) ;

}

}

תְפוּקָה:

שורה מס' 21 - שורה מס' 28:

סיכום

למדנו איך לכתוב את השאילתות ב-C# LINQ שדומה ל-SQL. כחלק ממדריך זה, דנו כיצד להשתמש באופרטור 'בחר' כדי לבחור את הרשומות ממקור הנתונים. כדי לסנן את הרשומות המוחזרות על ידי השאילתה, השתמשנו באופרטור 'where' על ידי ציון התנאים. לאחר מכן, למדנו כיצד למיין את הרשומות המוחזרות על ידי השאילתה עם האופרטור 'סדר לפי'. לבסוף, כדי להגביל את הרשומות, השתמשנו באופרטורים Skip() ו- Take().