95. LINQ query syntax

עד עכשיו ראינו בעיקר כל מיני Extension methods שיש במחלקה הסטטית Enumerable בnamespace של System.Linq.

אנחנו יכולים לכתוב כל מיני שאילתות כאלה:

1
2
3
4
5
IEnumerable<Person> family;
IEnumerable<string> childrenNames =
family.Where(person => person.Age <= 12)
.Select(person => person.FirstName);

כלומר, למצוא למשל את השמות הפרטיים של כל הילדים במשפחה.

לסינטקס כזה קוראים Fluent syntax.

קיימת גם אפשרות לכתוב syntax שמזכיר טיפה יותר שאילתת SQL שנראה ככה:

1
2
3
4
IEnumerable<string> childrenNames =
from person in family
where person.Age <= 12
select person.FirstName;

שמבצע בדיוק את מה שראינו מעלה.

לכל הכתיב הזה קוראים query syntax ולפעמים LINQ.

הסינטקס לא מוגבל רק לExtension Methods של System.Linq, אלא הוא מריץ Extension Methods כמו בכתיב למעלה. אם ניצור Extension Method משלנו בשם Select או Where, הוא יגש אליו

למשל אם ניצור Extension Methods כאלה

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static IEnumerable<TResult> Select<T, TResult>
(this IEnumerable<T> enumerable,
Func<T, TResult> selector)
{
Console.WriteLine("Hello world");
return new TResult[] {};
}
public static IEnumerable<T> Where<T>
(this IEnumerable<T> enumerable,
Func<T, bool> predicate)
{
Console.WriteLine("Hello world");
return new T[] {};
}

נראה שהשאילתא שרשמנו קודם נכנסת לקוד שלנו ומדפיסה Hello world.

כך שמי שטוען שהמימושים של LINQ לא יעילים, מוזמן לממש אותם בעצמו 😃

סופ"ש שפה מובנית שאילתא טוב

שתף