LINQ (زبان جستجوی یکپارچه)
1397/12/13 15:16 , میلاد صاحب نظر

LINQ (زبان جستجوی یکپارچه)

LINQ چیست؟

LINQ  قابلیت کوئری نویسی در سطح زبان و کارایی بهتر و بیشتر API را برای #C و VB به ارمغhن می‌آورد، چون در LINQ می‌توانید کدها را به صورت تفصیلی و خبری بنویسید.

نمونه ای از نحو و ترکیب کد نویسی در سطح زبان:

 

 

همان مثال، ایندفعه با استفاده از IEnumerable<T> API:

 

 

 

کدنویسی LINQ به صورت رسا و تفصیلی استفرض کنید لیستی از حیوانات خانگی دارید، قصد دارید آنها را به شکل یک دیکشنری مرتب کنید که در آن بتوانید با مقدار RFID مستقیما به یک حیوان خاص دسترسی یابید.کد سنتی دستوری به شکل زیر است:

 

 

 

هدف این کد ایجاد یک <Dictionary<int, pet جدید و اضافه کردن مورد به آن از طریق یک لوپ نیست، بلکه هدف تبدیل یک لیست موجود به یک دیکشنری است! LINQ  این قصد و هدف ما را به راحتی پیاده سازی می‌کند، در حالی که کد دستوری نمی‌تواند این کار را انجام دهد. کد معادل LINQ برای کد دستوری بالا به این شکل است:

 

ویژگی های LINQ

کدی که از قابلیت های LINQ استفاده می‌کند خیلی ارزشمند است، چون شرایط بین هدف و کد را از دیدگاه یک برنامه نویس بسیار ساده و راحت می‌کند. یک مزیت دیگر این است که کد مختصر و کوتاه است. تصور کنید، می‌توانید کدهای پایه طولانی را با این قابلیت تا یک سوم کاهش دهید. فوق العاده است، اینطور نیست؟LINQ امکان دسترسی ساده به داده ها را فراهم می‌سازدبرای این همه نرم افزار کوچک و بزرگی که امروزه در سطح اینترنت موجود است، همواره یک چیز بین همه آنها یکسان است و آن نیاز به دسترسی به منبع داده است(Database، JSON، XML و غیره).

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

 

 

 

 

 

اگر بخواهید به صورت دستی کدی بنویسید که از مستندات XML عبور کند، مسلما با چالش و مشکل بزرگی مواجه خواهید شد.تعامل به XMLتنها کاری نیست که LINQ توان انجام آن را دارد. Linq to SQL  نیز یک نگاشت شیء گرا (ORM) بسیار مفید و با ارزش برای پایگاه داده های سرور MSSQL می‌باشد. کتابخانه JSON.NET از طریق LINQ یک کد عبور از مستندات JSON بسیار کارآمد فراهم می‌کند.

علاوه بر این، اگر کتابخانه ای وجود ندارد که هدف مد نظر شما را عملی کند، می‌توانید همچنین تامین کننده LINQ خاص خودتان را بنویسید.چرا باید از ترکیب کوئری استفاده کنیم؟این سوالی است که گاها به ذهن هر برنامه نویسی خطور می‌کند. بالاخره هر چه باشد این کد:

 

خیلی دقیق تر و بهتر از این کد است:

 

 

LINQ یا API؟

آیا ترکیب API خیلی دقیق تر از ترکیب کوئری نیست؟البته که نه. ترکیب کوئری اجازه می‌دهد از شرط let استفاده کنید، که این شرط به شما امکان معرفی کردن و اتصال یک متغیر به داخل دامنه یک عبارت را فراهم کرده و باعث می‌شود بتوانید از قطعات داخلی و زیرین عبارت استفاده کنید. می‌توانید همین قطعه کد را با ترکیب API هم بنویسید، اما به احتمال زیاد خواندن کدی که نوشته می‌شود خیلی مشکل خواهد شد.بنابراین به این سوال می‌رسیم، آیا بهتر نیست فقط از ترکیب کوئری استفاده کنیم؟پاسخ این سوال بله است، اگر...·   

  • ترکیب کوئری از قبل در کد پایه شما موجود بوده باشد·  
  •  به خاطر پیچیدگی لازم باشد متغیرها را وارد دامنه کوئری های خود کنید·        
  • اگر ترکیب کوئری را ترجیح می‌دهید و این امر شما را از معماری کد پایه تان منحرف نمی‌کند.

پاسخ به این سوال نه هست، اگر...·       

  • ترکیب API از قبل در کد پایه شما به کار رفته باشد·  
  • نیازی به وارد کردن متغیرها به داخل دامنه کوئری های خود ندارید·    
  • ترکیب کد نویسی API را ترجیح می‌دهید و این شما را از معماری کد پایه شما منحرف نمی‌کند  

 مثال‌های ضروری

در زیر یک نمایش سریع از برخی قطعات ضروری کدهای LINQ را مشاهده می‌کنید. مسلما نمونه های زیر به هیچ عنوان جامع و کامل نیستند چون LINQ کارایی های خیلی بیشتری نسبت به آنچه در ادامه خواهید دید، ارائه می‌دهد. ·     

  • نمونه های ساده: Where، Select و Aggregate:

 

 

 

 

 

 

 

 

  •  مجزا سازی یک لیست از بین چندین لیست:

 

 

  • اتحاد بین دو مجموعه(با مقایسه گر سفارشی):

 

 

 

 

 

 

 

 

 

 

 

 

 

  • اشتراک بین دو مجموعه:

 

 

 

  • مرتب سازی:

 

 

 

  • در آخر، یک نمونه پیشرفته تر: تشخیص اینکه آیا مقادیر پراپرتی های دو نمونه از یک نوع با هم برابر هستند یا نه:

 

 

 

 

 

 

 

 

PLINQ

PLINQ یا LINQ  موازی، یک موتور اجرای موازی برای عبارات LINQ است. به عبارت دیگر، یک عبارت LINQ معمولی می‌تواند بدون هیچ دلیل و عوارضی درون هر تعداد نخ به صورت موازی اجرا شود. این امر از طریق فراخوانی تابع ()AsParallel قبل از عبارت انجام می‌شود.کد زیر را در نظر بگیرید: 

 

 

 

 

 

 

 

این کد facebookUsers را در صورت نیاز در بین نخ های سیستم تقسیم می‌کند، کل لایک های هر خط را به صورت موازی جمع می‌کند، جمع نتایج محاسبه شده توسط هر نخ را با هم جمع می‌کند و آن نتایج را درون یک رشته زیبا و قشنگ نمایش می‌دهد.

می‌توان این ویژگی را به شکل دیاگرام نمایش داد:

دیاگرام عملکرد PLINQ

دیاگرام عملکرد PLINQ

اعمال همزمان یا موازی CPU که به راحتی می‌توان آنها را از طریق LINQ نمایش داده و شبیه سازی کرد(به عبارت دیگر، توابع بی نقصی هستند و هیچ عوارض جانبی ندارند) کاندید عالی ای برای PLINQمی‌باشند. برای اعمالی که دارای عوارض جانبی هستند، بهتر است از کتابخانه موازی TASK استفاده کنید.

منبع: Docs.microsoft

 

 مطالب مرتبط

 مقدمه ای بر زبان برنامه نویسی #C و پلتفرم NET Framework.
 مقدمه ای بر NLog در هسته ASP.NET
 طبقه بندی زبان های برنامه نویسی

چگونه از طریق جاوا (Java)، به یک پایگاه‌داده مای‌اس‌کیوال (MySQL) متصل شویم

 ۵زبان برتر برنامه نویسی بلاک چین

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۳۱: توابع رشته‌ای – بخش ۳)
آموزش جامع SQL Server (جلسه ۳۱: توابع رشته‌ای – بخش ۳)

در جلسه قبل بخش ۲ مطالب مبحث توابع رشته‌ای یا string را به صورت کامل توضیح دادیم. و ...

آموزش جامع SQL Server (جلسه ۳۰: توابع رشته‌ای – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۰: توابع رشته‌ای – بخش ۲)

در جلسه قبل، مبحث توابع رشته‌ای یا String را آغاز کردیم. به دلیل ازدیاد این توابع و برای ...

با Visual Studio Code’s Live Share گروهی برنامه‌نویسی کنیم!
با Visual Studio Code’s Live Share گروهی برنامه‌نویسی کنیم!

چه در مراحل اولیه یادگیری یک زبان برنامه‌نویسی باشید یا یک کد نویس با تجربه و ماهر باشید، ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات