מדריך LINQ – תחביר LINQ

Extension Methods

את Extension Methods ראינו כבר בחלק הקודם, נראה עוד דוגמה אחת יחסית מורכבת, נניח שאנחנו רוצים לחפש את כל התיקיות שיש להם מעל 10 קבצים ולפחות קובץ אחד גדול יותר מ – 20 KB, בנוסף נרמה לייצר מחלקה משלנו ולא להחזיר אובייקט של DirectoryInfo.

נגדיר מחלקה שנראת כך:

class MyDirectoryInfo
{
    public int FileNumbers { get; set; }
    public string DirectoryName { get; set; }
}
 
var x1 = Directory.GetDirectories("path", "", SearchOption.AllDirectories)
            .Select(x => new DirectoryInfo(x))
            .Where(x =>
                {
                    var files = x.GetFiles();
                    return files.Length >= 10 && files.Any(fi => fi.Length > 10);
                })
            .Select(x => new MyDirectoryInfo()
            {
                DirectoryName = x.Name,
                FileNumbers = x.GetFiles().Length
            });

במידה ולא היה לנו מחלקה שנקראת MyDirectoryInfo יכולנו להחזיר Anonymous Types.

Syntactic sugar

כדי להקל על הכתיבה (לפעמים) אפשר לכתוב (חלק) משאילתות LINQ בתחביר אחר. נתחיל עם משהו פשוט יחסית, מציאת כל העובדים שהמשכורת שלהם קטנה מ – 2000

class Employee
{
    public string Name { get; set; }
    public double Salary { get; set; }
}

בתחביר הקודם היינו כותבים קוד כזה:

List<Employee> listEmp = GetList();
var lowSalary = listEmp.Where(x => x.Salary < 2000);

בתחביר החדש ניתן לכתוב כך

var lowSalary = from n in listEmp
                where n.Salary < 2000
                select n;

את השאילתא המורכבת (של הקבצים) ניתן לתרגם לזה

var directories = from n in Directory.GetDirectories("path", "",SearchOption.AllDirectories)
                  let di = new DirectoryInfo(n)
                  let files = di.GetFiles()
                  where files.Length >= 10 && files.Any(x => x.Length > 10)
                  select new MyDirectoryInfo()
                  {
                      DirectoryName = di.Name,
                      FileNumbers = files.Length
                  };


פורסם במקור בבלוג של שלמה גולדברג (הרב דוטנט) – מרצה ויועץ במכללת סלע

תגיות: ,

תגובות בפייסבוק