آموزش Linq در زبان سی شارپ
Loading...
LINQ

در این مقاله به بررسی  Linq در زبان سی شارپ میپدازیم ، Linq چیست ؟ ، مزایای استفاده از LINQ و معماری آن را در C# بررسی میکنیم همراه من باشید.

در این مقاله درباره Linq یاد خواهیم گرفت و با آن آشنا می شویم.

مطالبی که در این مقاله می بینیم:

  • LINQ چیست؟
  • مزایای استفاده از LINQ
  • معماری LINQ
  • LINQ Providers

LINQ چیست؟

LINQ مخفف عبارت Language Integrated Query به معنی زبان یکپارچه کوئری است. LINQ ما را قادر میسازد تا هر نوع داده ذخیره شده ای (داکیومنت های SQL Server، اشیای داخل حافظه و…) را کوئری بزنیم.

چرا باید از LINQ استفاده کنیم؟

LINQ

LINQ به ما امکان کار کردن با منابع داده مختلف را با استفاده از انواع استایل کدنویسی مشابه مانند SQL Database، XMLDocuments و اشیای داخل حافظه مانند لیست مشتریان، لیست سفارشات، لیست فروش و… را فراهم می کند. برای برنامه نویسی که برای واکشی داده ها از منابع مختلف روی اپلیکیشن های .NET کار می کند، باید تکنولوژی و نحوه نگارش همه این منابع داده متفاوت را بداند. برای واکشی داده ها از SQL باید ADO.NET و T-SQL بداند که مخصوص دیتابیس SQL است. به همین ترتیب برای داکیومنت های XML برنامه نویسان باید نحوه نوشتن XPATH و XSLT را بداند. همچنین برای واکشی داده ها از اشیای درون حافظه برنامه نویس باید کدنویسی و نحوه نگارش آرایه ها و جنریک ها را بداند.

معماری LINQ

LINQ

این معماری LINQ است؛ همه ما می دانیم که می توانیم اپلیکیشن های .NET را توسعه دهیم. به طور مشابه، برنامه نویسی LINQ نیز همه زبان های برنامه نویسی .NET ای که در شکل ذکر شده برمی گرداند. بین کوئری LINQ واقعی و منبع داده اصلی جزء دیگری وجود دارد که به آن LINQ Provider می گوییم. وظیفه این LINQ Providerتبدیل این کوئری LINQبه فرمتی است که منبع داده اصلی می تواند آن را بفهمد.

فرض کنیم اپلیکیشن سعی می کند داده ها را از دیتابیس SQL واکشی کند. اگر منبع داده SQL باشد، این کوئری LINQ با LINQ to SQL provider منطبق می شود که کوئری LINQ را به T-SQL تبدیل می کند که دیتابیس اصلی می تواند آن را بفهمد. به طور مشابه، اگر کوئری LINQ باید داده هایی را از داکیومنت XML واکشی کند کوئری LINQ با آن منطبق می شود که LINQ to XML provider می باشد که کوئری LINQ به XLST تبدیل می شود که برای منبع داده XML قابل فهم است.

با یک مثال بیشتر با LINQآشنا می شویم.

در SQL Server، ما داده های زیر را داریم.

LINQ

LINQ

حال یک سری کد ADO.NET می نویسیم؛ برای این کار یک اپلیکیشن خالی ایجاد کرده و یک وب فرم به آن اضافه می کنیم.

LINQ

یک gridview به وب فرم اضافه می کنیم.

LINQ

حالا اجازه دهید connection string را به فایل web.config پروژه اضافه نماییم.

LINQ

LINQ

حال کدهای ADO.NET را برای فرم خود می نویسیم:

این کد ساده ADO.NET می باشد. ما connection string را از فایل web.config خوانده و با استفاده از آن شی SQL Connection را ایجاد کرده و سپس SQL command واقعی را که می خواهیم روی دیتابیس اجرا شود، ارسال می کنیم. که این یک T-SQL مختص دیتابیس SQL می باشد. به کوئری نگاه کنید، ما firstname، lastname، gender را از جدول name داریم که gender = male می باشد. توجه داشته باشید که اینجا خبری از intellisense نیست و به همین دلیل این کوئری در اینجا مستعد خطاست. ممکن است زمان نوشتن کوئری دچار خطا شویم. به جای Firstname ممکن است به اشتباه Firstname1 یا هر چیز دیگری بنویسیم. بنابراین در هنگام نوشتن intellisense مناسبی در اختیار ما نیست. سپس، ما لیستی از دانش آموزان را ارسال می کنیم، اتصال را باز کرده و لیستی از دستورات را اجرا کرده و سپس حلقه تکراری روی اشیا می زنیم. نمونه ای از شی student ساخته و سپس داده ها را از reader واکشی کرده و propertyهای مربوطه از شی student را پر می کنیم و شی student را به لیست اضافه می کنیم و اتصال را می بندیم.

بنابراین، اجازه دهید که سریعتر آن را اجرا کنیم و ببینیم که کار می کند یا خیر.

LINQ

به این ترتیب، فقط دانش آموزان با جنسیت male را واکشی کرد. حالا، با توجه به اینکه اینجا intellisense نداریم اجازه دهید که چند اشتباه را به عمد مرتکب شده و اجرا بگیریم.

LINQ

نام ستون را به LastName1 تغییر داده و دوباره اجرا می گیریم.

LINQ

با این خطا مواجه می شویم. به این دلیل که کوئری های ADO.NET در رشته ها قرار گرفته و intellisense و بررسی خطایی وجود ندارد. با استفاده از LINQ، ما این خطاها را دریافت می کنیم، بنابراین همین مثال را با استفاده از LINQانجام می دهیم.

حال وب فرم قبل را حذف کرده و وب فرم جدیدی اضافه می نماییم.

LINQ

کنترل gridview را اضافه کرده و به فایل code behind آن می رویم. حال یک کامپوننت LINQ به صورت زیر به کلاس SQL اضافه می کنیم

روی فولدر پروژه راست کلیک کرده -> Add را انتخاب -> سپس New Item -> و بعد Data را انتخاب می کنیم.

LINQ

LINQ to SQL را انتخاب کرده و نام دلخواه خود مثلا Sample.dbml را روی آن می گذاریم.

LINQ

جدول را کشیده و روی Sample.dbml رها می کنیم و دوباره به فایل sample.designer.cs برمی گردیم. حالا یک سری کد در قسمت code behind می نویسیم. علاوه براین، در فایل sample.designer.cs داریم:

LINQ

SampleDataContext درگاهی به سوی دیتابیس به شی کلاس sampleDataContext برای بازیابی داده ها از دیتابیس می باشد.

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

LINQ

بنابراین انچه ما می خواهیم بازیابی داده ها از دیتابیس SQL با استفاده از کوئری LINQاست بنابراین آنچه که کوئری LINQبرمی گرداند ما به عنوان منبع داده کنترل gridview استفاده می نماییم.

LINQ

در اینجا از یک کلمه کلیدی استفاده کردیم و یک student متغیر ایجاد کردیم که در آن همه دانش آموزان حاضر در datacontextstudents هستند. حالا ما همه دانش آموزان را نمی خواهیم تنها آن هایی را می خواهیم که جنسیت آن ها male باشد

ابتدا برای همه دانش آموزان می بینیم:

LINQ

حال، اجازه دهید که سریعتر اجرا گرفته و خروجی را ببینیم.

LINQ

حال می خواهیم آن ها را فیلتر کنیم؛ ما فقط male ها را می خواهیم بنابراین شرط where را اعمال می نماییم.

LINQ

همانطور که مشاهده می کنید ما در اینجا به intellisense ای که پیشتر درباره اش صحبت کردیم، دسترسی داریم.

LINQ

شرط where را همانطور که فقط male را می خواستیم اعمال کردیم، حال دوباره اجرا می گیریم.

LINQ

همانطور که در خروجی مشاهده می کنید فقط رکوردهای male را دریافت کردیم. حالا سعی می کنیم شرط where را تغییر دهیم. حالا ستون gender را به Gender1 تغییر داده و برنامه را build می کنیم.

LINQ

همانطور که در تصویر خروجی بالا مشاهده می نمایید، خطا گرفته شد.

LINQ

به این ترتیب، این کوئری LINQماست. می خواهیم که این کوئری قادر به بازیابی داده ها از دیتابیس SQL Server باشد. آیا SQL Server می تواند این کوئری LINQ را بفهمد؟ خیر

SQL Server تنها می تواند T-SQL را بفهمد بنابراین باید یک شخص واسطی در این بین باشد که این کوئری LINQ را به کوئری T-SQL که برای SQL Server قابل فهم باشد، تبدیل نماید. چه کسی می تواند باشد؟ این کار LINQ Provider است. LINQ to SQL آن را به T-SQL تبدیل کرده و به دیتابیس T-SQL ارسال می نماید.

برای اثبات آن برنامه را اجرا کرده و به پروفایلر SQL Server رفته و عبارت T-SQL را می بینیم.

پروفایلر SQL Server ما به شکل زیر است:

LINQ

حال اجازه دهید که فرم را اجرا کرده و کوئری را در پروفایلر SQL Server بررسی نماییم.

LINQ

حال فقط عبارت را کپی کرده و در SQL Server می چسبانیم و اجرا می گیریم و مشاهده خواهیم کرد که خروجی ها یکسان است.

LINQ

تا اینجا دیدیم که کوئری LINQچگونه با دیتابیس ها کار می کند، حالا یک مثال از اشیای آرایه داخل حافظه را با هم بررسی می نماییم.

LINQ

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

LINQ

نتیجه گیری

به این ترتیب ما با منابع داده مختلف کار کردیم. یکی منبع داده T-SQL و دیگری منبع داده حافظه بود. اما کوئری LINQ برای هر دو مشابه بود. بسته به نوع منبع داده کوئری تغییر چندانی نکرد. مفهوم provider را بررسی کردیم که رابطی بود که کوئری LINQ را به نحوه نگارشی تبدیل می کرد که مختص منبع داده بود.



avatar فاطمه زکایی

فاطمه زکایی هستم. فارغ التحصیل کارشناسی مهندسی نرم افزار، مدت سه سال هست که در زمینه توسعه اپلیکیشن های تحت وب و اندروید و همچنین تولید محتوای تخصصی برنامه نویسی تحت وب و اندروید در مجموعه mspsoft در خدمت شما هستم.

آخرین مطالب و تخفیفات در کانال تلگرام :) کانال تلگرام ام اس پی سافت
مطالب مرتبط
ديدگاه خود را ارسال کنيد


محبوب ترين ويدئو هاي انلاين
دوره برنامه نویسی فروشگاه اینترنتی
  • تعداد اعضا 80k
  • قيمت دوره۱۰۰,۰۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...
دوره آموزشی سیستم ثبت سفارش آنلاین
  • تعداد اعضا 80k
  • قيمت دوره۵۰,۰۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...
دوره طراحی سیستم مدیریت مشتریان
  • تعداد اعضا 80k
  • قيمت دوره۵۰,۰۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...