زبان LINQ چیست؟


کلمه LINQ سرنام Language Integrated Query می باشد. در واقع پرس و جوهایی که به همراه زبان سی شارپ و یا ویژوال بیسیک یکپارچه گردیده اند را با استفاده از LINQ به سادگی انجام خواهیم داد. با استفاده کردن از زبان LINQ می توانیم داده‌های مورد نظرمان را از درون منابع داده ای و یا data source ‌های مختلف و در فرمت‌های مورد نظرمان دریافت کنیم. با استفاده کردن از زبان LINQ دیگر نیازی نیست که یک زبان پرس و جوی دیگر شبیه به SQL را فرا بگیرید.

به عبارت دیگر با استفاده از LINQ و دانشی که در زبان سی شارپ و یا ویژوال بیسیک دارید به راحتی می توانید داده هایی که مد نظرتان است را به صورت یک شکل از منابع داده مختلف دریافت کنید. این موضوع نیز بسیار مهم است. با استفاده از زبان LINQ یک interface یکسان برای پرس و جو زدن به data source هایی که احتمالاً متفاوت می‌باشند، در دسترس شما قرار خواهد گرفت. برای مثال همانطور که احتمالاً می‌دانید از زبان SQL که مخفف Structured Query Language می باشد برای ذخیره کردن و بازیابی داده ها از درون دیتابیس ها استفاده می شود. به همین ترتیب نیز LINQ یک Structured Query Syntax و یا املای پرس و جوی ساختار یافته دارد که در زبان سی شارپ و یا ویژوال بیسیک گنجانده شده است و با استفاده از آن می توانیم داده ها را از درون data source های مختلف بازیابی کنیم. این data source ها می توانند collection ها، dataset های مربوط به ADO.Net، فایل های xml،web service ها، بانک‌های اطلاعاتی از قبیل sql server و یا دیگر دیتابیس ها باشند. هر چقدر که data source های شما متفاوت باشد، بر روند استفاده کردن از LINQ تفاوتی ایجاد نمی کند. به همین دلیل است که LINQ یک interface یکسان برای بازیابی داده ها از data source های مختلف را در اختیار ما قرار می دهد. لطفاً به تصویر زیر نگاه کنید.


پرس و جوها و یا query هایی که با LINQ می نویسید، نتایج را در قالب object هایی برمی گرداند و این به شما کمک می‌کند که با استفاده از مفاهیم مربوط به شی گرایی بر روی result set و یا مجموعه داده هایی که برگردانده می‌شود عملیاتی را انجام بدهید. به عبارت دیگر؛ دیگر نیازی نیست که نگران تبدیل کردن result set ها به قالب و یا فرمت های مختلف و object ها باشید. تصویر زیر این موضوع را نشان می‌دهد.


حال که تا حدودی توانستیم ماهیت LINQ و برتری های آن را درک کنیم، مثالی را از یک query نوشته شده با استفاده از LINQ بررسی خواهیم کرد. دستوری که در قسمت زیر نوشته شده است، تمامی string های موجود در یک آرایه را که شامل کاراکتر a می باشد را برمی گرداند. در این مثال منبع داده و یا همان data source یک آرایه است که در آن عناصر رشته ای قرار گرفته اند. لطفاً کد زیر را ببینید.

// Data source

string[] names = {"Bill", "Steve", "James", "Mohan" };

// LINQ Query

var myLinqQuery = from name in names

where name.Contains('a')

select name;

// Query execution

foreach(var name in myLinqQuery)

Console.Write(name + " ");

همانطور که در کد بالا مشاهده می کنید، دستور LINQ را به یک متغیر به نام MyLinqQuery انتساب داده ایم. دستوری که در قسمت بالا مشاهده می کنید با یک syntax خاص به نام query syntax نوشته شده است. در واقع در LINQ می توان به دو صورت مختلف دستورات را نوشت. در رابطه با query syntax در قسمت‌های بعد صحبت خواهیم کرد. یکی از نکات مهم مربوط به LINQ این است که با نوشتن دستورات، پرس و جو و یا query اجرا نمی شود، فقط دستورات نوشته می شود. حال برای اجرا کردن این query می توان به روش های مختلف عمل کرد. یکی از این روش ها استفاده کردن از حلقه تکرار foreach برای اجرا کردن query موجود در متغیر myLinqQuery می باشد. حلقه تکرار foreach این query را بر روی data source اجرا کرده و نتایج را برمی گرداند. نتایج برگردانده شده در قالب یک مجموعه نتیجه و یا اصطلاحاً result set به ما تحویل داده می شود. بنابراین هر query نوشته شده با استفاده از LINQ که از این پس به آن LINQ query می‌گوییم، باید بر روی یک data source از قبیل یک آرایه، collection ‌ها، فایل های xml و یا حتی دیتابیس ها اجرا بشود و نتیجه آن در قالب یک result set و یا مجموعه نتایج برای ما برگردانده شود. به عبارت دیگر؛ صرفاً با نوشتن یک دستور LINQ و قرار دادن آن در یک متغیر، آن دستورات اجرا نمی شود و برای اجرا شدن آن ها روش های مختلفی وجود دارد که یکی از آنها استفاده کردن از حلقه تکرار foreach می باشد.

منبع: وبسایت پرووید