98. query syntax into keyword

אחד הKeywordים הפחות מוכרים בLINQ הוא into,

נניח יש לנו שליפה כזאת:

1
2
3
4
5
IEnumerable<string> childrenWithShortName =
from person in family
where (person.Age <= 12) &&
(person.FirstName.Length <= 3)
select person.FirstName;

זו שאילתא שמוצאת את כל הילדים שיש להם שם קצר

שימו לב לסחבת - אנחנו ניגשים לאותו Property כמה פעמים, מה שלא הכי יפה. (ראו גם טיפ 48 כדי להבין למה חשוב לא לעשות את זה)

במקום זאת נוכל לפצל את השאילתא לשתי שאילתות, באמצעות הkeyword ששמו into:

1
2
3
4
5
6
7
IEnumerable<string> childrenWithShortName =
from person in family
where person.Age <= 12
select person.FirstName
into first
where first.Length <= 3
select first;

מה שעשינו זה הכנסנו את הProperty ששמו FirstName לתוך משתנה ששמו first, וכך אנחנו ניגשים אליו רק פעם אחת, כפי שמציע טיפ מספר 48.

מדובר כאן ביותר מסמנטיקה, הintoמפצל את השאילתא לשתי שאילתות. למה הכוונה? אחרי הintoלא נוכל לגשת למשתנים בScope הקודם של השאילתא, לדוגמה לperson:

1
2
3
4
5
6
7
8
IEnumerable<string> childrenWithShortName =
from person in family
where person.Age <= 12
select person.FirstName
into first
where (first.Length <= 3) &&
(person.LastName == "Cohen") // This line doesn't compile
select first;

הקוד שכתבנו בעצם מתקמפל לשרשור ההגיוני הבא:

1
2
3
4
IEnumerable<string> childrenWithShortName =
family.Where(person => person.Age <= 12)
.Select(person => person.FirstName)
.Where(first => first.Length <= 3);

המשך יום שאילתא מובנית שפה טוב

שתף