تبلیغات
پرسش و پاسخ - سئوالات کامپیوتری - درباره ی LINQ
كامپیوتر برای همه

:درباره وبلاگ

:آرشیو

:طبقه بندی

:پیوندها

:پیوندهای روزانه

:صفحات جانبی

:نویسندگان

:آخرین پستها

:ابر برچسبها

:نظرسنجی

آماروبلاگ

دوشنبه 20 دی 1389-12:33 ب.ظ



(LINQ)تلفظ می شود “لینک” مخفف Language INtegrated Query یکی از اجزای پلتفرم برنامه نویسی دات نت شرکت مایکروسافت است که قدرت کار با داده های مختلف را به زبانی شبیه زبان SQL به توسعه دهندگان می دهد. LINQ در 19 نوامبر 2007 به عنوان قسمتی از دات نت فریم ورک 3.5 عرضه شد.  . .

(LINQ)تلفظ می شود “لینک” مخفف Language INtegrated Query یکی از اجزای پلتفرم برنامه نویسی دات نت شرکت مایکروسافت است که قدرت کار با داده های مختلف را به زبانی شبیه زبان SQL به توسعه دهندگان می دهد. LINQ در 19 نوامبر 2007 به عنوان قسمتی از دات نت فریم ورک 3.5 عرضه شد.

منطق و دستورات لینک شبیه به زبان SQL است با این تفاوت که به تنهایی کابردی ندارد. شما باید از زبان لینک در کنار یکی از زبان های دات نت استفاده کنید تا به مقصود خود برسید در صورتی که زبان SQL یک زبان مستقل برای کار با داده هاست. اگر برنامه نویس باشید می دانید که برای دستیابی به داده های موجود در یک بانک اطلاعاتی علاوه بر استفاده از فناوری های دستیابی به داده همچون ADO باید از زبان SQL نیز استفاده کنید. مشکلی که برنامه نویسان قبل از ارائه لینک با آن مواجه بودند این بود که لایه دسترسی به داده ها از روش و منظقی متفاوت از لایه های دیگر عمل می کند. مثلاً در نظر بگیرید در یک برنامه مبتنی بر بانک اطلاعاتی برنامه نویس باید داده ها را از یک بانک اطلاعاتی با استفاده از دستورات SQL بخواند و سپس با منطق زبان برنامه نویسی آن ها را به لایه نمایش بفرستد. این عدم سازگاری لایه های نرم افزاری مشکلات زیادی به همراه می آورد. امروزه برنامه نویسان بر اساس مدل “شیء گرا” کدهای خود را می نویسند. واژه هایی همچون کلاس، شیء، متد و وراثت برای برنامه نویسان آشناست و آن ها هر روز در پروژه هایشان از آن ها استفاده می کنند. در این میان یکی از مشکلات برنامه نویسان شیء گرا، عدم شیء گرایی پایگاه های داده و داده های XML است. پروژه LINQ برای اضافه کردن قابلیت شیء گرایی به زبان SQL و در نتیجه پایگاه های داده و داده های XML بوجود آمد.

" UploadTak

شرکت مایکروسافت برای غلبه بر مشکلات ذکر شده زبانی را طراحی نمود که در حال حاضر در دات نت فریم ورک 3.5 از آن استفاده می شود و همراه با ویژوال استادیو 2008 عرضه شده است. تمام سعی مایکروسافت بر این بوده که قواعد (Syntax) زبان لینک شبیه به زبان SQL باشد تا برنامه نویسان مجبور نباشند برای یادگیری آن وقت بگذارند. اگر برنامه نویس باشید می دانید که کوئری های زبان SQL را در یک زبان برنامه نویسی باید به صورت رشته ای (String) بنویسید و این بدین معنی است که در این صورت کوئری ها قابلیت اشکال زدایی (Debugging) نخواهند داشت. در این روش اشکال زدایی دستورات SQL بسیار مشکل خواهد بود و بعضی وقت ها واقعاً دردسر ساز خواهد شد. این را هم می دانید که دستورات SQL که به صورت رشته نوشته می شوند به همراه دیگر دستورات برنامه کامپایل نمی شوند و فقط به صورت ریسورس های رشته ای ذخیره می شوند. حالا در نظر داشته باشید که با لینک می توانید مشکلات بالا را برطرف کنید و کوئری های SQL را اشکال زدایی کنید. بدین ترتیب برنامه نویسان دات نت می توانند در هر یک از زبان های مورد حمایت دات نت همچون ویژوال بیسیک و سی شارپ از فناوری LINQ استفاده کنند و از مزایایی مثل خطایابی، IntelliSense و قدرت ویژوال استادیو استفاده کنید. به یاد داشته باشید که LINQ فقط برای داده های موجود در بانک های اطلاعاتی مورد استفاده قرار نمی گیرد بلکه صرف نظر از منبع داده ها LINQ قادر است با داده های آرایه های مختلف، کلاس ها، اشیای مختلف و فایل های XML مورد استفاده قرار گیرد.

مثلث راكس‌           
این روزها اكثر برنامه‌نویسانی كه با زبان‌های شی‌گرایی مثل سی شارپ یا جاوا كار می‌كنند، از دو ابزار مهم دیگر نیز برای ساختن برنامه‌های خود استفاده می‌كنند: یكی از این ابزارها دیتابیس یا همان بانك‌اطلاعاتی، و دیگریXML است. البته XML ‌موجود جدیدی در بافت نرم‌افزارها است، ولی اكنون معلوم شده كه با حضور اینترنت در دنیای كامپیوتر، استفاده از XML تقریبا قابل چشم پوشی نیست.


مشكلی كه برنامه‌نویسان با آن درگیرند این است كه هر یك از این سه ابزار از منطق و مدل داده‌ای (Data Model)  متفاوتی پیروی می‌كنند. مدل داده‌ها در بانك‌های اطلاعاتی معمولاً زبان ‌SQL است. در حالی كه هر زبان برنامه‌نویسی مدل داده‌ای  خاصی دارد. مثلاً پلتفرم دات‌نت از فناوری ADO.NET ‌استفاده می‌كند. واضح است كه مدل داده‌ها در ‌ADO.NET و SQL تفاوت‌های زیادی با هم دارند.    
 
مدل داده‌ها در فرمت XML هم به گونه دیگری است. در ‌XML باید از زبان XQuery استفاده كنید. برنامه نویس در حین كار روزمره خود مرتباً نیاز دارد داده‌های خود را از یك مدل به مدل دیگر منتقل كند. مثلاً در یك برنامه مدیریت فروش محصولات، گاهی برنامه‌نویس لازم می‌داند داده‌های مشتریان را از بانك اطلاعاتی (مثلا ً‌SQL Server یا‌MySQL یا ORACLE) بخواند و سپس به فرمت XML تبدیل كند تا بتواند آن را از مجرای اینترنت (مثلاً از طریق وب‌سرویس‌ها) عبور دهد. در این صورت ناگزیر است همزمان داده‌ها را ابتدا با منطق ‌SQL بخواند، سپس با منطق Business Tier (مثل ADO.NET) پردازش كند و سپس با منطق XQuery تبدیل كند.          

اریك میر از متخصصان‌SQL Server در شركت مایكروسافت این سه گانگی را مثلث ROX نامیده است كه سرنام عبارات Relations in data tier ،Objects in business tier وXML in presentation tier است.

این موضوع می تواند چالش های متعددی را برای پیاده کنندگان نرم افزار به دنبال داشته باشد :

·         در مواردی که فریمورک دات نت را به عنوان پلت فرم انتخاب کرده باشیم ، دات نت قادر به درک کدهای SQL نخواهد بود.

·          در مواردی که از زبان های برنامه نویسی حمایت شده در دات نت جهت نوشتن کد در محیط ویژوال استودیو استفاده می کنیم ، همواره یک ابزار قدرتمند در کنار ما است تا در صورت اشتباه در گرامر دستورات توصیه های لازم را ارائه نماید ( IntelliSense ) .از ویژگی فوق نمی توان در ارتباط با  SQL  استفاده کرد .

·         امکان بررسی نوع ها در زمان ترجمه وجود ندارد . این بدان معنی است که پیاده کنندگان تا زمانی که برنامه اجراء نگردد ، نمی توانند مشکلات احتمالی را مشاهده و قبل از زمان اجراء با آنها برخورد نمایند .

·         شرکت مایکروسافت امکانات متعددی را در فریمورک دات نت جهت کار با اسناد XML  ارائه کرده است . ارائه System.Xml ،  System.Xml.XPath و System.Xml.Schema  نمونه هائی در این زمینه می باشند . پیاده کنندگان نرم افزار در زمان کار با اسناد XML مجبور بودند که از فناوری های متعددی نظیر    DOM ( برگرفته شده از Document Object Mode ) و XQuery  استفاده نمایند . همین موضوع باعث شده بود که کار با اسناد XML نظیر خواندن و یا نوشتن داده در آنها برای بسیاری از پیاده کنندگان مشکل باشد.

شرکت مایکروسافت برای حل مشکلات فوق ، بررسی دو راهکار را در دستور کار خود قرار داد :

·         ایجاد پتانسیل های مورد نیاز  مختص XML و یا داده رابطه ای در هر یک از زبان های برنامه نویسی و زمان اجراء . راهکار فوق نه تنها مشکل اصلی را حل نمی کرد بلکه در مواردی مشکلات را خصوصا" در زمینه نگهداری افزایش می داد . 

·         اضافه کردن قابلیت های همه منظوره نوشتن query در فریمورک دات نت  . به عبارت دیگر یک فریمورک همه منظوره با قابلیت نوشتن query درون فریمورک دات نت که زبان های VB.NET و #C بتوانند به سادگی از مز ایای آن استفاده نمایند .

خوشبختانه ، شرکت مایکروسافت گزینه دوم را انتخاب نمود . ایجاد یک زیرساخت جهت نوشتن query در بین اشیاء ، اسناد XML ، داده رابطه ای و ...
هم اینک پیاده کنندگان می توانند از مزایای یک الگوی تعریفی در هر یک از زبان های دات نت جهت کار با داده  استفاده نمایند . ارائه مجموعه اپراتورهای استاندارد جهت نوشتن
query یکی از دستاوردهای مهم LINQ محسوب می گردد .  بدین ترتیب ، پیاده کنندگان می توانند با بکارگیری یک مجموعه یکسان از اپراتورهای نوشتن query در هر یک از زبان های برنامه نویسی حمایت شده در دات نت ، از داده ذخیره شده در  منابع داده مختلف صرفنظر از نوع منبع داده استفاده نمایند . همچنین ، امکان استفاده از پتانسیل هائی نظیر   IntelliSense  و بررسی نوع ها در زمان ترجمه نیز وجود خواهد داشت .

مثال:

برای نوشتن اولین برنامه لینک خود یک برنامه کنسول ایجاد کنید و سپس کد زیر را در آن بنویسید :

using System;

using System.Linq;

string[] myWords = { "hello world", "hello LINQ", "hello Aghdam" };

var items =

    from item in myWords

    where item.EndsWith("LINQ")

    select item;

 

foreach (var item in items)

    Console.WriteLine(item);

 


اگر کد بالا را اجرا کنید خروجی برابر با
hello LINQ خواهد بود!

همانطور که مشاهده فرمودید عبارت کوئری بالا بسیار شبیه به کوئری های
SQL است ،حالا می خواهیم قسمت های این کد را شرح دهیم .

   در قسمت کوئری یک متغیر از نوع
var به نام items تعریف شده است که برای خروجی کوئری مورد استفاده قرار می گیرد ، سپس items توسط یک عبارت پرس و جوی LINQ مقداردهی اولیه شده است. در قسمت اول از عبارت پرس و جو ،from برای تعیین نام منبع داده استفاده می شود . متغیر item در عبارت نشانگر یک عضو در مجموعه items است .

در قسمت
where شرط های لازم برای بازیابی اطلاعات از منبع داده تبیین شده  است که تابع Endwith از کلاس string فراخوانی شده که در صورتی که قسمت پایانی رشته با "LINQ" به پایان برسد ،این تابع مقدار true برمی گرداند و سرانجام در قسمت select ،قسمت ها / بخش ها / یا فیلد های که می خواهیم نمایش دهیم را انتخاب می کنیم.

 

 




نظرات() 

تاریخ آخرین ویرایش:دوشنبه 20 دی 1389 12:48 ب.ظ


What makes you grow taller during puberty?
جمعه 17 شهریور 1396 11:47 ق.ظ
I think the admin of this web site is in fact working hard in favor of his web page, since here every information is quality based material.
Do compression socks help with Achilles tendonitis?
جمعه 13 مرداد 1396 12:16 ب.ظ
I'm really inspired together with your writing skills as smartly as with the structure for your blog.
Is that this a paid theme or did you modify it yourself?
Anyway keep up the excellent high quality writing, it is uncommon to look a
great blog like this one nowadays..
https://www.viagrapascherfr.com/viagra-pas-cher-france-cherche/
چهارشنبه 7 تیر 1396 05:10 ق.ظ
I like what you guys are usually up too. This kind
of clever work and coverage! Keep up the amazing works guys I've incorporated you guys
to my own blogroll.
pills
جمعه 12 خرداد 1396 05:03 ب.ظ
Good information. Lucky me I came across your site by accident (stumbleupon).
I have bookmarked it for later!
buy-trusted-tablets.com
چهارشنبه 3 خرداد 1396 08:19 ق.ظ
It's an remarkable article for all the online people; they will take benefit from it I am
sure.
https://www.viagrasansordonnancefr.com/acheter-viagra-sildenafil/
جمعه 4 فروردین 1396 09:23 ب.ظ
Useful info. Fortunate me I discovered your site by accident, and I'm shocked why this twist of fate did
not took place earlier! I bookmarked it.
فاطمه
پنجشنبه 23 دی 1389 08:00 ب.ظ
سلام مهندس
از اینكه بعد ازیك وقفه نسبتاطولانی دوباره شروع به كاركردید خیلی خوشحالم .باز هم مثل همیشه مطلبتون مفید وخوب بود. ممنون از اینكه زحمت میكشی ومطالب خوب رو تو وبلاگ میزاری. موفق باشید
پاسخ R.KH : .سلام فاطمه جون!ممنون از بابت نظر لطفت گلم. مرسی که به وبلاگ خودت سر میزنی عزیزم.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر