Linq مخفف Query Integrated-Language به معنای زبان پرس و جوی یکپارچه است . Query یکپارچه با زبان (LINQ )مجموعه ای قدرتمند از فناور ی ها است که مبتنی بر ادغام قابلیت های پرس و جو مستقیما در زبان C# است. پرس و جوهای LINQ ساختار زبانی درجه یک در NET#.C هستند، درست مانند کالس ها ، متدها ، رویدادها . LINQ یک تجربه پرس و جوی ثابت برای پرس و جو اشیا ( LINQ به Objects ) پایگاه داده های رابطه ای ( LINQ به SQL ) و XML ( LINQ به XML ) ارائه می دهد. Query) LINQ یکپارچه زبان) دستور پرس و جو یکنواخت در C #و NET.VB برای بازیابی داده ها از منابع و فرمت های مختلف است . این در C #یا VB یکپارچه شده است، ، در نتیجه عدم تطابق بین زبان های برنامه نویسی و پایگاه های داده را حذف می کند ، و همچنین یک رابط پرس و جو واحد برای انواع مختلف منابع داده ارائه می دهد. به عنوان مثال ، SQL یک زبان پرس و جو ساخت یافته است که برای ذخیره و بازیابی داده ها از پایگاه داده استفاده می شود .
به همین ترتیب ، LINQ یک دستور ساختار یافته است که در C #و NET.VB برای بازیابی داده ها از انواع مختلف منابع داده مانند مجموعه MS SQL Server و سرویس وب، XML Docs ،ADO.Net DataSet ،ها و سایر پایگاه های داده ساخته شده است .
کوئری های LINQ نتایج را به صورت اشیا برمی گرداند . این به شما امکان می دهد از رویکرد شی گرا در مجموعه نتایج استفاده کنید و نگران تبدیل فرمت های مختلف نتایج به اشیا نباشید .
مثال زیر یک کوئر ی ساده LINQ را نشان می دهد که تمام رشته ها را از آرایه ای که حاوی " a " است دریافت می کند .
در مثال بالا ، نام آرایه های رشته ای یک منبع داده است. در زیر یک کوئری LINQ است که به متغیر myLinqQuery اختصاص داده شده است
تا زمانی که پرس و جوی LINQ را اجرا نکنید، به نتیجه نخواهید رسید. کوئری LINQ را می توان به روش های مختلفی اجرا کرد، در اینجا ما از حلقه foreach برای اجرای پرس و جو ذخیره شده در myLinqQuery استفاده کردیم. حلقه foreach پرس و جو را روی منبع داده اجرا می کند و نتیجه را دریافت می کند و سپس روی مجموعه نتایج تکرار می شود. بنابراین ، هر پرس و جوی LINQ باید به نوع ی از منابع داده پرس و جو کند ، خواه آرایه ، مجموعه ، XML یا پا یگاه های داده دیگر باشد . پس از نوشتن کوئری LINQ باید آن را اجرا کرد تا نتیجه به دست آید . چرا LINQ؟ برای درک اینکه چرا باید از LINQ استفاده کن یم ، به چند نمونه نگاه می کنیم . فرض کنید می خواهید لیستی از دانش آموزان نوجوان را از آرایه ای از اشیاء Student پیدا کنید . قبل از 0.2# C ،ما مجبور بودیم از یک حلقه " foreach " یا " for " برای عبور از مجموعه برا ی یافتن یک شی خاص استفاده کنیم. به عنوان مثال، ما مجبور شدیم کد زیر را بنویسیم تا همه اشیاء Student را از آرایه ای از Students که سن آنها بین 12 تا 20 سال است )برای نوجوانان 13 تا 19 )پیدا کنیم :
استفاده از حلقه for دست و پا گیر است، قابل نگهداری و خواندن نیست. سی شارپ 0.2 نماینده را معرفی کرد که میتوان از آن برای مدیریت این نوع سناریو استفاده کرد، همانطور که در زیر نشان داده شده است .
بنابراین، با 0.2# C ، از مزیت نماینده در یافتن دانش آموزان با هر معیاری برخوردارید . برای یافتن دانش آموزان با معیارهای مختلف، لازم نیست از حلقه for استفاده کنید . برای مثال ، میتوانید از همان تابع delegate برای یافتن دانش آموزی که StudentId او 5 است یا نامش Bill است، استفاده کنید، مانند زیر :
تیم سی شارپ احساس کردند که هنوز باید کد را فشرده تر و خواناتر کنند . بنابراین آنها متد پسوند ، عبارت المبدا ، درخت بیان، نوع ناشناس و عبارت پرس و جو را در سی شارپ 0.3 معرفی کردند. شما میتوانید از این ویژگیهای 0.3# C استفاده کنید، که بلوکهای سازنده LINQ برای پرس و جو در انواع مختلف مجموعه و دریافت عنصرهای به دست آمده در یک عبارت واحد هستند. مثال ز یر نشان می دهد که چگونه می توانید از پرس و جوی LINQ با عبارت lambda برای یافتن دانش آموز خاصی از مجموعه دانش آموز استفاده کنید .
همانطور که در مثال بالا می بینید، ما معیارهای مختلفی را با استفاده از عملگر LINQ و عبارت lambda در یک دستور مشخص می کنیم. بنابراین ، LINQ کد را فشرده تر و قابل خواندن تر می کند و همچنین می تواند برای پرس و جو از منابع داده مختلف استفاده شود . به عنوان مثال، اگر به جای آرایه ای از اشیاء دانشجویی مانند بالا ، یک جدول دانشجویی در پایگاه داده دارید ، همچنان می توانید از همان پرس و جو برای یافتن دانش آموزان با استفاده از Framework Entity استفاده کنید. مزایای LINQ زبان آشنا : توسعه دهندگان مجبور نیستند برای هر نوع منبع داده یا قالب داده، یک زبان جستجوی جدید یاد بگیرند . کدنویسی کمتر: در مقایسه با رویکرد سنتی تر ، مقدار کدی را که باید نوشته شود کاهش می دهد. کد قابل خواندن: LINQ کد را خواناتر می کند تا توسعه دهندگان دیگر بتوانند به راحتی آن را درک کرده و حفظ کنند. روش استاندارد پرس و جو از چندین منبع داده: از همان نحو LINQ می توان برای پرس و جو از چندین منبع داده استفاده کرد . ایمنی زمان کامپایل کوئری ها : بررسی نوع اشیاء را در زمان کامپایل فراهم می کند. پشتیبانی از IntelliSense LINQ : IntelliSense را برای مجموعه های عمومی فراهم میکند . شکل دادن به داده ها : می توانید داده ها را به اشکال مختلف بازیابی کنید .