۱۳۸۹/۰۶/۱۱

آموزش LINQ-قسمت سوم-عملگرهای استاندارد پرس و جو


نکته خیلی مهم : این پست برای مطالعه توصیه نمی شود برای  یادگیری LINQ می توانید به " دوره آموزشی LINQ " مراجعه کنید.


عملگرهای استاندارد پرس وجو - Standard Query Operators
عملگر استاندارد پرسو جو یک API است که امکان انجام کوئری بر روی آرایه ها و مجموعه ها را فراهم می کند.عملگرهای استاندارد پرس و جو در واقع توابعی هستند که در کلاس های ایستای System.Query.Sequence و به عنوان  متدهای الحاقی تعریف شده اند (واقع در اسمبلی System.Query.dll ) ،واز آن در هر زبان تحت دات نتی که Generic ها و ویژگی های جدید دات نت را پشتیبانی کند می توان استفاده کرد.
از عملگرهای استاندارد پرس و جو می توان بر روی هر شئ که واسط <IEnumerable<T  را پیاده سازی کند ،استفاده کرد توجه داشته باشید که به جای T می توان هر نوع دیگری قرار داد.
رابط <IEnumerable<T
در هنگام استفاده از foreach شاید برای شما هم این سوال پیش آمده که این حلقه  چطور بین مجموعه های یک شی گردش می کند! خوب اگر کنجکاوی کرده باشید متوجه شده اید که  foreach بر روی تمامی اشیاء نمی تواند گردش کند ،دلیل آن هم پیاده سازی نکردن واسط& <IEnumerable<T توسط آن شئ است.
پیاده سازی رابط <IEnumerable<T که در فضای نام System.Collections قرار دارد،به شکل زیر است :
public interface  IEnumerable<T>  : IEnumerable  
{  
    IEnumerator<T>  GetEnumerator();  
} 

همانطور که مشاهده می کنید ،متد GetEnumerator یک ارجاع به به رابط دیگری به نام<IEnumerable<Tبر می گرداند.این رابط ساختاری را مهیا می کند که به فراخواننده امکان پیمایش اشیاء داخلی محتوی سازگار با <IEnumerable<Tرا می دهد :

public interface IEnumerator<T> :  IEnumerator  
{  
  T Current { get; }  
}  
توجه کنید که <IEnumerator<T  از رابط IEnumerator مشتق شده که پیاده سازی زیر مهیا می کند

public interface IEnumerator  
{  
    object Current { get; }  

    bool MoveNext();  
  
    void Reset();  
}  
در زیر یک شئ People که رابط IEnumerable را پیاده سازی کرده است وجود دارد:

public class Person  
{  
     public Person(string fName, string lName)  
     {  
         this.firstName = fName;  
         this.lastName = lName;  
     }  
   
     public string firstName;  
     public string lastName;  
}  
   
public class People : IEnumerable  
{  
     private Person[] _people;  
     public People(Person[] pArray)  
     {  
         _people = new Person[pArray.Length];  
   
         for (int i = 0; i < pArray.Length; i++)  
         {  
             _people[i] = pArray[i];  
        }  
     }  
   
     IEnumerator IEnumerable.GetEnumerator()  
     {  
        return (IEnumerator) GetEnumerator();  
    }  
   
      public PeopleEnum GetEnumerator()  
      {  
         return new PeopleEnum(_people);  
     }  
}  
که می توان با foreach  در آن پیمایش کرد:

class App  
{  
    static void Main()  
    {  
        Person[] peopleArray = new Person[3]  
        {  
            new Person("John", "Smith"),  
            new Person("Jim", "Johnson"),  
            new Person("Sue", "Rabon"),  
        };  
  
        People peopleList = new People(peopleArray);  
        foreach (Person p in peopleList)  
            Console.WriteLine(p.firstName + " " + p.lastName);  
  
    }  
}
حال که با<IEnumerable<T   آشنا شدید و نحوه پیاده سازی آن را مشاهده کردید ،به سراق عملگرهای استاندارد پرسو جو می رویم

انواع عملگرهای استاندارد پرس وجو
در زیر لیستی از انواع این عملگرها آمده است که درقسمت های بعدی هر کدام را به طور کامل توضیح خواهم داد.
  • عملگر شرطی                  -              Restriction Operator
  • عملگرهای پرتو                -             Prejection Operators
  • عملگرهای اتصال             -                        Join Operators
  • عملگر دسته بندی              -                 Grouping Operator
  • عملگرهای مرتب سازی     -                Ordering Operators
  • عملگرهای تجمعی             -            Aggregate Operators
  • عملگرهای قسمت بندی شده -           Partitioning Operators
  • عملگرهای الحاقی             -      Concatenation Operators
  • عملگرهای عنصری          -                 Element Operators
  • عملگرهای تولیدی             -            Generation Operators
  • عملگرهای کمیت سنج        -               Quantifier Operators
  • عملگرهای تنطیم کننده       -                          Set Operators 
  • عملگرهای تبدیل              -             Conversion Operators
Vote on iDevCenter

هیچ نظری موجود نیست:

ارسال یک نظر