آنچه در این صفحه می خوانید:
معرفی LINQ
Language Integrated Query به اختصار LINQ، یک مدل و روش برنامه نویسی مایکروسافت است که اساسا قابلیت های پرس و جو رسمی را به زبان های برنامه نویسی مبتنی بر دات نت اضافه می کند. LINQ یک سینتکس جمع و جور، مفسر و قابل فهم را برای تغییر داده ها ارائه می دهد. LINQ از یک سینتکس مشابه اس کیو ال استفاده می کند تا عبارات پرس و جو را فراتر از قابلیت های SQL جاسازی شده در زبان های برنامه نویسی ایجاد کند. به همین دلیل است که SQL جاسازی شده از سینتکس های ساده برای افزودن کوئری های SQL به زبان برنامه نویسی دیگر استفاده می کند، که در آن هیچ تلاشی برای ادغام چنین کوئری هایی به سینتکس نیتیو و مکانیزم تایپ وجود ندارد. بنابراین، نمی توانید ساختارهای زبان مادری مانند قابلیت در دستورات SQL جاسازی شده را فراخوانی کنید، تا وقتی که می توانید از LINQ استفاده کنید، چرا که برای استفاده از سینتکس نیتیو، ساختارها و مکانیزم های تایپ استفاده می شود. علاوه بر این، LINQ ممکن است برای دسترسی به انواع داده ها استفاده شود، در حالی که SQL جاسازی شده محدود به آدرس دادن به پایگاه های داده ای است که می تواند پرس و جوهای SQL را انجام دهد.
LINQ، یک مؤلفه دات نت فریمورک است که قابلیت جستجوی داده های بومی را به زبان های NET. اضافه می کند، که در ابتدا به عنوان بخش عمده ای از NET Framework 3.5. در سال 2007 منتشر شد. LINQ با افزودن عبارات پرس و جو، که شبیه به عبارت SQL هستند، زبان را گسترش می دهد و می تواند برای استخراج و پردازش راحت داده ها از آرایه ها، کلاس های بیشمار، اسناد اکس ام ال، پایگاه داده های رابطه و منابع داده شخص ثالث استفاده شود. سایر کاربردها، که از عبارات نمایش داده شده به عنوان یک فریمورک کلی برای ترکیب محاسبات دلخواه استفاده می کنند، شامل ساخت حوادث یا پارسرهای monadic است. همچنین مجموعه ای از اسامی متد (به نام عملگرهای جستجوی استاندارد یا اپراتورهای دنباله استاندارد) را تعریف می کند، به همراه قواعد ترجمه ای که توسط کامپایلر برای ترجمه عبارات نمایش داده شده به سبک روان به عبارات با استفاده از این نام های روش، عبارات لامبدا و توابع ناشناس استفاده می شود. بسیاری از مفاهیمی که LINQ معرفی کرد در ابتدا در پروژه تحقیقاتی Cω مایکروسافت مورد آزمایش قرار گرفتند.
ویژگی های LINQ
اگرچه مایکروسافت با بخشی از LINQ که کد T-SQL را تولید می کند، در برابر اس کیوال سرور کار نمی کند، اما این شرکت هنوز هم از LINQ برای پردازش نتایج پرس و جو پشتیبانی می کند. LINQ تمایل دارد که در زمینه یک گروه فناوری دوم - ارائه دهنده - مانند LINQ to XML، LINQ To SQL ارجاع شود. هر یک از این دسته ها بر اساس نحو اصلی LINQ ساخته شده اند و تفاوت بین دسته ها می تواند ظریف باشد. یک توسعه دهنده در ابتدا ممکن است استفاده از LINQ To SQL را پیشنهاد دهد. برخی از توسعه دهندگان همچنان به استفاده از LINQ To SQL به عنوان ابزاری آشنا در موقعیت های خاص ادامه می دهند، اگرچه تمرکز بزرگتر LINQ روی داده هایی است که از SQL Server برگشته اند. مناطقی که در آن LINQ نقش محکمی را ایفا می کند در پردازش داده ها به صورت اشخاص و نتایج حاصل از پردازش رویه های ذخیره شده در برابر یک پایگاه داده است.
LINQ شش روش استاندارد برای دسترسی به داده ها ارائه می دهد. البته، به معنای واقعی کلمه ده ها ارائه دهنده شخص ثالث برای LINQ وجود دارد که یکی از نقاط قوت LINQ به عنوان یک فناوری است. برای دسترسی به SQL، مایکروسافت LINQ را به SQL ارائه می دهد. مایکروسافت همچنین از فناوری های دیگری مانند ADO.NET مستقیم، Entity Framework و سرویس های داده WCF برای دسترسی به پایگاه داده پشتیبانی می کند. اگرچه بیشتر این فناوری ها از قابلیت های منحصر به فردی برخوردار هستند، اما تعدادی از آنها نیز در برخی از سطح با هم همپوشانی دارند. به عنوان مثال، قابلیت های LINQ To SQL در واقع زیر مجموعه ای از قابلیت های Entity Framework 4.0 هستند. با این حال، فریمورک Entity از سطح زمین تا به منظور ایجاد یک لایه انتزاعی تر از آنچه LINQ To SQL ارائه می دهد، طراحی شده است. انتزاع فریمورک Entity برخی از پیچیدگی ها را می بخشد، اما با استفاده از سازگاری بیشتر.
هر یک از این فناوری های دسترسی به داده دارای ویژگی های مختلفی هستند که باعث می شود از آن استفاده مناسب صورت گیرد. برخی از این خصوصیات فنی هستند، برای مثال، LINQ To SQL فقط از پایگاه داده های SQL Server پشتیبانی می کند. اگر نیاز به جستجوی پایگاه داده اوراکل دارید، LINQ To SQL گزینه ای نیست. برخی دیگر به خصوصیات برنامه بستگی دارند. برای مثال، اگر می خواهید جداول اصلی را ایجاد کنید (یعنی داده های رابط را به یک مدل شی تبدیل کنید)، Entity Framework بسیار قدرتمندتر از سایر گزینه ها، به خصوص LINQ To SQL است.
معماری LINQ
کاربران می توانند با پرس و جو با استفاده از LINQ از اسناد XML، پایگاه داده های رابطه ای و مجموعه های حافظه پرس و جو کنند. زبان هایی که از قابلیت LINQ پشتیبانی می کنند VB، سی شارپ و غیره هستند. منابع داده با استفاده از منابع داده LINQ که شامل چاشنی های های LINQ مانند LINQ to Objects، LINQ to ADO.NET و LINQ to XML هستند به زبان متصل می شوند.
چاشنی های اصلی LINQ عبارتند از:
- LINQ to objects: به جستجوی اشیاء در حافظه مانند آرایه ها، لیست ها، لیست عمومی و هر نوع مجموعه اجازه می دهد.
- LINQ to XML: با تبدیل سند به اشیاء XElement و پرس و جو با استفاده از موتور اجرای محلی، امکان جستجوی سند XML را می دهد.
LINQ به ADO.NET، این شامل:
- LINQ to SQL: این کار به طور ویژه برای کار با بانک اطلاعات سرور SQL استفاده می شود.
- LINQ to dataset: به هر پایگاه داده ای که می تواند با ADO.NET پرس و جو کند، پرس و جو را انجام می دهد.
- LINQ to entities: شبیه به LINQ To SQL است. این امکان را به توسعه دهندگان می دهد تا از مدل داده مفهومی مفهوم سوال کنند
- Parallel LINQ: این یک پسوند LINQ به اشیاء است که دارای یک کتابخانه برنامه نویسی موازی است. با استفاده از این می توان پرس و جو را برای اجرای همزمان در پردازنده های مختلف تقسیم کرد.
LINQ در سی شارپ
در بخش زیر سازه های جدید زبان معرفی شده در سی شارپ 3.0 معرفی شده است. اگرچه این ویژگی های جدید تا حدی با نمایش داده شدگان LINQ استفاده می شوند، اما محدود به LINQ نیستند و در هر زمینه ای که در آن ها از نظر شما مفید باشند می توان از آنها استفاده کرد.
عبارات پرس و جو از یک سینتکس اعلانی مشابه SQL یا XQuery برای جستجوی مجموعه های IEnumerable استفاده می کنند. در زمان کامپایل، سینتکس پرس و جو به فراخوانی های متد به اجرای ارائه دهنده LINQ از روش های فرمت استاندارد عملگر پرس و جو تبدیل می شود. برنامه های کاربردی با مشخص کردن فضای نام مناسب با یک دستورالعمل، اپراتورهای استاندارد نمایش داده شده را کنترل می کنند. عبارت query زیر مجموعه ای از رشته ها را تشکیل می دهد، آنها را مطابق اولین شخصیت موجود در رشته گروه بندی می کند و گروه ها را سفارش می دهد.
LINQ To SQL چیست؟
نقطه شروع منطقی برای ورود به پیچ و مهره های LINQ و SQL سرور هسته اصلی LINQ To SQL است. بر خلاف فناوری های پایگاه داده قدیمی، اگرچه مایکروسافت در حال پیشرفت های LINQ To SQL نبوده است، این شرکت کاملاً آن را رها نکرده است. پیشرفت ها بیشتر به جای بهبود ابزار یا اضافه کردن ابزار، بر پرداختن به موضوعات تمرکز دارد. به نوعی پشتیبانی از نوع جدید داده را شامل می شود. همانطور که گارد در وبلاگ خود یادداشت می کند، سیاست رسمی مایکروسافت این است که این شرکت هسته LINQ را بهبود ببخشد و ممکن است برخی از درخواست های مشتری را پیاده سازی کند، اما Entity Framework تمرکز اصلی این شرکت است.
روشن شدن هسته واقعی LINQ به فناوری های SQL از اهمیت بسیاری برخوردار است. LINQ To SQL اساساً دو مدل دارد. یکی از این مدل ها پشتیبانی از ایجاد پویا و ارسال پرس و جوهای T-SQL به SQL Server است. مدل دوم اجرای T-SQL موجود مانند رویه های ذخیره شده است که از آن مجموعه داده ای را برمی گرداند. تولید و اجرای دستورات T-SQL قلب آنچه منحصر به فرد است و ممکن است بهتر باشد به عنوان LINQ To SQL Server توصیف می شود. منطق استفاده شده مخصوص SQL Server برخلاف سایر سیستم های مدیریت پایگاه داده (DBMS) است و بخشی از دلیل LINQ To SQL (برخلاف Entity Framework) مخصوص SQL Server است. با این وجود، هسته اصلی این منطق با تولید SQL پویا پیوند خورده است و یکی از نقاط قوت اولیه LINQ در نظر گرفته می شد.
LINQ به عنصر منحصر به فرد SQL استفاده از متن داده نیست، بلکه کاری است که LINQ به عنوان بخشی از یک پرس و جو پویا انجام می دهد. به عنوان مثال، وقتی از یک جدول داده SQL Server با یک پرس و جو LINQ پرس و جو می کنید، LINQ در واقع T-SQL تولید می کند و آن پرس و جو را به پایگاه داده ارسال می کند. با این وجود، اگر به جای آن از LINQ در برابر همان زمینه برای اجرای یک روش ذخیره شده استفاده می کنید، هیچ T-SQL برای تولید وجود ندارد. در عوض، پرس و جو شما بازگشت از روی روش ذخیره شده را انجام می دهد - مجموعه داده ها. بنابراین، اگرچه بیشتر افراد استفاده از رویه های ذخیره شده را با LINQ To SQL مرتبط می کنند و ما در مورد آن صحبت می کنیم و آن را در آن زمینه پیاده سازی می کنیم، نتایج یک پرس و جو با استفاده از یک روش ذخیره شده می تواند به آسانی از یک زمینه Entity Framework یا حتی مستقیم ADO.NET از آن اجرا شود. این کد در واقع با استفاده از LINQ به مجموعه داده ها برخلاف LINQ با SQL است.
از آنجا که شیء DataContext (به عنوان مثال، System.Data.Linq.DataContext) به شما امکان می دهد یک روش ذخیره شده را ارجاع دهید، تصور اولیه و عملکردی این است که LINQ از روش های ذخیره شده پشتیبانی می کند. با این حال، فقط استفاده از LINQ برای اجرای یک روش ذخیره شده بیش از حد است. برخی از توسعه دهندگان برنامه ممکن است فقط دسترسی به روش های داده به پایگاه داده های خود را ذخیره کنند، در این صورت احتمالاً LINQ To SQL بهترین فناوری دسترسی به داده ها نیست. احتمالاً شما با استفاده از فریمورک Entity برای سایر کارها، از Entity Framework در یک برنامه NET Framework 4.0. استفاده می کنید.
سناریوی دیگری که ممکن است با آن روبرو شوید این است که شما از NET Framework 3.5 یا 3.0 استفاده می کنید اما هنوز در این مرحله نیستید NET Framework 4.0. در این حالت، فریم ورک Entity کمتر از حد مطلوب است زیرا اگرچه نسخه های قبلی از Entity Framework پشتیبانی می کنند، تا زمانی که NET Framework 4.0. یک گزینه مناسب نیست. ممکن است در چنین مواردی با LINQ همکاری کنید، یا ترجیح می دهید در عوض با ADO.NET و مجموعه های داده کار کنید و LINQ را در ردیف میانی اعمال کنید.
LINQ To XML چیست؟
LINQ to XML یک رابط برنامه نویسی XML در حافظه را ایجاد می کند که از فریمورک Query-LETQ یکپارچه با زبان NET استفاده می کند. LINQ to XML از قابلیت های دات نت استفاده می کند و با یک رابط برنامه نویسی XML شی مجدداً طراحی شده قابل مقایسه است.
XML به عنوان روشی برای قالب بندی داده ها در بسیاری از زمینه ها بطور گسترده اتخاذ شده است. به عنوان مثال، می توانید XML را در وب، در فایل های پیکربندی، در فایل های Microsoft Office Word و در پایگاه های داده پیدا کنید. LINQ to XML یک رویکرد به روز و دوباره طراحی شده برای برنامه نویسی با XML است. این ویژگی قابلیت اصلاح سند در حافظه از (DOM) را فراهم می کند و از عبارات نمایش LINQ پشتیبانی می کند. اگرچه این عبارات نمایش داده شده از نظر نحوی متفاوت از XPath هستند، اما عملکردهای مشابهی را ارائه می دهند.