با سلام خدمت کاربران عزیز روکسو، در این سری از آموزش ها قصد داریم به آموزش LINQ در C# بپردازیم. دوستان عزیزی که با زبان C# (سی شارپ) آشنایی ندارند می توانند دوره آموزش مقدماتی تا پیشرفته زبان C# (سی شارپ) را از طریق لینک زیر به صورت رایگان دریافت کنند:

پیش نیازها

  1. مباحث کامل شی گرایی (OOP)
  2. مبانی چند ریختی (polymorphism)
  3. آشنایی کامل با دستورات اولیه (for،while، if،var و…)
  4. Lambda Expressions
  5. آشنایی با دستورات Sql
  6. آشنایی با Interface و delegate
توجه:‌ تمام مواردی که در بخش پیش نیازها ارائه شده است، در دوره آموزش مقدماتی تا پیشرفته سی شارپ (که لینک آن را در بالا قرار دادیم) به صورت رایگان موجود می باشد.

LINQ چیست؟

linq مخفف Language-Integrated Query به معنای زبان پرس و جوی یکپارچه است که در دات نت 3.5 معرفی شد و به برنامه نویس اجازه می دهد که داده ها را از هر نوع منبع داده ای بدون نیاز به دانستن یک زبان دیگر پرس و جو کند. پرس و جو فرایند به دست آوردن داده از منبع داده است. linq پرس و جوی داده ای از منابع داده ای مختلف را بسیار راحت کرده است.

قبل از معرفی linq توسط ماکروسافت، برنامه نویسان مجموعه کدهای مختلفی برای منابع داده ای مختلف استفاده می کردند. مثلا برای پرس و جو در دیتابیس از دستورات sql و برای کار با فایل های xml از Xpath استفاده می کردند، اما با استفاده از تکنولوژی LINQ فقط لازم است با کلمات کلیدی LINQ و متدهایی که در دات نت 3.5 معرفی شد آشنایی داشته باشند، در این صورت با استفاده از یک زبان واحد می توان با تمامی منابع داده ارتباط برقرار کرد.

برای کار LINQ باید فضای نام System.linq را در برنامه ی خود using کنید. در این بسته کلاس ها و متدهای extension قرار دارند که با کمک آن ها می توانید با منابع داده ای مخلتلف کار کنید. لازم به ذکر است LINQ در برنامه نویسی های دانت نت دیگر نیز قابل استفاده است مثلا VB.net.

شکل زیر نوع معماری LINQ را نشان می شود .

نمای کلی از معماری Linq در زبان های .NETنمای کلی از معماری LINQ

بر اساس شکل بالا، انواع مختلفی از LINQ وجود دارد که به شرح زیر می باشد:

  • LINQ to Objects
  • LINQ to Datasets
  • LINQ to SQL
  • LINQ to Entities
  • LINQ to XML

که در بخش های آینده هر مورد را بررسی خواهیم کرد.

حالا این سوال مطرح می شود چرا باید از LINQ استفاده کنیم؟ چه چیزی در LINQ باعث شده که اکثر برنامه نویسان به سراغ آن می روند؟

طبق گفته ی ماکروسافت LINQ بسیار پایدار، امن، و قابل اعتماد است و در برنامه های بزرگ و پیچیده بسیار قدرتمند عمل کرده است، به همین دلیل اکثر برنامه نویسان به جای یادگیری چند زبان برای کار با داده های مختلف ترجیح می دهند با LINQ کار کنند.

برخی از مزایای مهم LINQ

  1. در ADO.NET کار با پایگاه داده به صورت Query است که مثلا به صورت String نوشته می شود و در صورت داشتن خطا بعد از کامپایل مشخص می شود اما چون LINQ جز دستورات NET. به شمار می رود قبل از کامپایل می توان خطای آن را اصلاح کرد.
  2. به دلیل intellisense بودن تمامی دستورات (تکمیل خودکار)، می توان از غلط های املایی جلوگیری کرد (حدس دستورات توسط IDE).
  3. می توان یک کد پرس و جو را در جاهای مختلف استفاده کرد
  4. با استفاده از NET debugger. می توان آن را اصلاح کرد
  5. از تمامی دستورات مرتب سازی،دسته بندی و جست و جو به راحتی پشتیبانی می کند

مانند هر تکنولوژی، LINQ نیز دارای معایبی می باشد که به شرح زیر است:

  1. برای پرس و جو های پیچیده مقدار کد نوشته شده با LINQ کمی بیشتر از Sql است.
  2. اگر در نوشتن پرس و جو (Query) مهارت کافی نداشته باشید، کد نوشته شده ممکن است ضعیف عمل کند. (کد باید بهینه سازی شود)
  3. برای استفاده از این تکنولوژی در هر پروژه باید فایل های DLL مربوطه به پروژه اضافه شود.

خب در اینجا هم مزایا و هم معایب LINQ بررسی شد اما با توجه به این که مزایای آن بسیار بیشتر معایب آن است، یادگیری و استفاده از آن به تمامی برنامه نویسان پبشنهاد می شود.

در تمامی آموزش ها، توضیحات بر روی مثال ها انجام خواهد گرفت چون توضیحات اضافی ممکن است از بار آموزشی بکاهد.

چند متد ساده در LINQ

در ابتدا چند متد ساده را بررسی می کنیم تا با کلیات و شکل LINQ آشنا شوید. در جلسه ی آینده آموزش را با LINQ To Object شروع خواهیم کرد.

توجه کنید که تمامی این متد ها در کلاس Enumerable قرار دارند و از نوع extension هستند و قبل از آن لازم است فضای نام System.linq را به پروژه ی خود اضافه کنید.

متد Min

متد Min کم ترین مقدار آرایه را در متغیر result قرار می دهد.

متد Max

با استفاده از این متد می توان مقدار Max موجود در آرایه را در MaximumNum قرار داد.

متد Sum