LINQ چیست؟

LINQ مخفف Language Integrated Query به معنای زبان پرس و جوی یکپارچه است که در دات نت نسخه 3.5 معرفی شد و به برنامه نویس اجازه می‌دهد داده‌ها را از هر نوع منبع داده‌ای بدون نیاز به دانستن یک زبان دیگر پرس و جو کند. پرس و جو فرایند به دست آوردن داده از منبع داده است. LINQ پرس و جوی داده از منابع داده‌ای مختلف را بسیار راحت کرده است. این زبان با زبانهای C# و VB آمیخته شده است و چندین کلمه کلیدی و دستور زبان برای استفاده از آن به دو زبان مذکور اضافه شده است. قبل از ورود LINQ، برنامه نویسان مجموعه کدهای مختلفی برای منابع داده‌ای مختلف می‌نوشتند. به عنوان مثال، برای پرس و جو در یک دیتابیس SQL از دستورات SQL یا برای فایل‌های XML از Xpath استفاده می‌کردند. اما اکنون با استفاده از قدرت LINQ فقط لازم است با کلمات کلیدی LINQ و متدهای آن که در دات نت 3.5 معرفی شدند آشنا باشید.
linq-introduction-1001
چندین نوع LINQ به دلیل وجود provider های مختلف وجود دارد (شکل بالا). ویژوال استودیو دارای چندین provider مانند LINQ to Objects می‌باشد. در این قسمت تمرکز ما بر LINQ to Objects است که در پرس و جوی مجموعه‌ای از اشیاء در کد شما که رابط IEnumerable<T> را پیاده سازی می‌کنند مورد استفاده قرار می‌گیرد. مثال‌هایی از این اشیاء، آرایه‌ها و لیست‌ها یا یک مجموعه سقارشی می‌باشد که شما ایجاد کرده‌اید. LINQ to SQL هم مخصوصاً طوری طراحی شده است که پرس و جوی دیتابیس‌های SQL Server را راحت می‌کند. برای پرس و جوی فایل‌های XML، می‌توان از LINQ to XML استفاده نمود. همچنین می‌توان LINQ را برای پرس و جوی انواع منابع داده‌ای دیگر بسط داد.

تکنیک‌های پرس و جو به کار رفته در درس‌های زیر، می‌توانند در انواع مختلف LINQ مورد استفاده قرار بگیرند. شما می تونید با استفاده از متدهای الحاقی که در رابط IEnumerable<T> تعریف شده‌اند از LINQ استفاده کنید. می‌توانید این متدها را مستقیماً فراخوانی کنید، اما باید درباره عبارات لامبدا اطلاعاتی داشته باشید. همچنین می‌توان از عبارات پرس و جو که دستور زبانی شبیه به SQL دارند استفاده کرد. عبارات پرس و جو ابزار مهمی هستند. عبارت‌های پرس و جو ابزار اصلی برای دسترسی به داده‌ها با استفاده از LINQ به شمار می‌آیند گرچه شما می‌توانید از متدهای الحاقی و عبارات لامبدا هم برای پرس و جو استفاده کنید.

زبان برنامه نویسی سی شارپ جز زبان‌های روالمند است به این معنی که شما برای حل یک مسئله باید قدم به قدم کدهای آن را بنویسید ولی LINQ جز زبان‌های غبر روالمند است به این معنی که شما به کامپیوتر می گویید که چه چیزی را لازم دارید (صرف نظر از الگوریتم آن) و کامپیوتر آن را برای شما فراهم می‌کند. قبلاً از LINQ ، شما فقط باید با استفاده از زبان‌های روالمند در بین نتایج پرس و جو می‌کردید. برای مثال فرض کنید که قصد دارید لیست تمامی اعداد زوج داخل یک آرایه را بدست آورید . برای نوشتن راه حل مسئله بالا با استفاده از زبان برنامه نویسی سی شارپ کد شما چیزی شبیه کد زیر می‌شود :

List<int> evenNumbers = new List<int>();
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

foreach(int num in numbers)
{
   if (num % 2 == 0)
      evenNumbers.Add(num);
}

با استفاده از کد بالا شما به کامپیوتر دستور می‌دهید که تک تک مقادیر داخل آرایه را بررسی کند و مقادیری که با شرط داده شده مطابقت دارند را به لیست اضافه کند. حالا مثال بالا را با استفاده از زبان LINQ به شکل زیر بازنویسی کرده‌ایم :

int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

var evenNumbers = from n in numbers
                  where n % 2 == 0
                  select n;

فعلاً به دستور زبان آن توجهی نکنید، در قسمت‌های بعدی مفصل در این مورد توضیح می‌دهیم. اولین نکته‌ای که در کد بالا قابل توجه است اینست که، کد بالا نسبت به کد قبلی ساده‌تر و قابل فهم تر است.