آموزش Linq (بخش اول)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش اول
LINQ
در این بخش قصد دارم به معرفی LINQ بپردازم و آن را به صورت مختصر و درحین حال کامل آموزش دهم
همان طور که می دانید شما برای گرفتن کوئری و به عبارتی پرس و جو بر روی منبع های مختلف مثل XML,SQL و ... نیاز به آموزش زبان های مختلف دارید که مشکل بسیار بزرگی است راه حل ارائه گردیده استفاده از زبانی است که از همه این منبع ها پشتیبانی نماید. لینک در VS2008 و .Net 3.5 ارائه گردید و linq مخفف عبارت Language Integrated Query است.
برای تئوری همین کافی است.
لطفا از این پس LINQ را لینک تلفظ نمایید.
در اجرای دستورات لینک سه بخش مورد استفاده است:
- منبع داده
- پرس و جو
- اجرا
مثال:
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
var numQuery = from num in numbers where (num % (0 == 2 select num;
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
یک آرایه عددی داریم حال می خواهیم آنهایی زوج هستند را انتخاب کنیم و در نهایت چاپ شوند.
اگر بخواهم به ساده ترین روش آن را توضیح دهم، برای استفاده از لینک باید به صورت زیر عمل نمایید
= نتیجه
کلمه کلیدی where+ منبع + کلمه کلیدی in + متغییری برای نگهداری یک عنصر از منبع (متغییر دامنه)+ کلمه کلیدیfrom
همان متغییر نگهدارنده + کلمه کلیدی select +هرشرطی +
مثال:
var numQuery = from num in numbers where (num % (0 == 2 select num;
به همین سادگی لینک را یاد گرفتید، بقیه موارد نکات زبانی و تکنیکی آن است.
لینک فقط بر روی منبع های قابل شمارش می تواند فعالیت کند مثل همین آرایه، یعنی شی منبع باید به صورت IEnumberable<T> باشد.
نحوه نوشتن یک دستور ساده لینک را مشاهده کردید اما روشی با نام Lambda وچود دارد که با ساختار لینک در نوع املا تفاوت دارد مثلا دستور زیر را همه متوجه می شویم:
IEnumerable<int> numQuery1 =
from num in numbers
where num % 2 == 0
orderby num
select num;
حال می توان به شکلی دیگر این دستور را نوشت:
IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n);
خیلی ساده است فقط کافی است کمی دقت کنید، تا قبل از علامت مساوی که مشخص است اما بعد از آن ابتدا منبع را مشخص می کنیم و سپس کلمه کلیدی where و بعد داخل پرانتز شرط را می نویسیم و سپس مرتب سازی را با کلمه کلیدی Orderby و مجددا داخل پرانتز شرط مرتب سازی.
خوب تنها بخش مبهم همان عبارت داخل پرانتز است:
num => num % 2 == 0
در بخش معرفی املا لینک متغییری برای نگهداری یک عنصر از منبع را معرفی کردیم در اینجا نیز به همین صورت است. ما num را یک متغییر معرفی کردیم و پس از => شرط مورد نظر را نوشتیم.
خصوصیت هایی برای Linq
- Anonymous types - متغییر های بدون نوع؛var یک نوع است که در زمان تعریف و گرفتن مقدار نوع آن مشخص می شود
- Object Initializers - وقتی ما از کلاس ها استفاده می کنیم و آن را مقدار می کنیم که به آن در مهندسی نرم افزار Entity Type گفته می شود در بعضی مواقع مقدار دهی کمی آزار دهنده است و روش جدیدی برای مقدار دهی وجود دارد تا این مشکل بر طرف شود؛ مثال
Person p= new Person { id=1, name = "E$maeil" };
- Type Inference - همان تغییرهایی از نوع var که توسط کامپایلر نوعشان مشخص می گردد مثال:
var myNumbers = new List<int>(1, 2, 3);
- Extension Methods - در بخشی دیگر با نام توابع توسعه به صورت کامل توضیح داده ام.
- Lambda Expressions - در بخشی دیگر با نام عبارت لامبدا به صورت کامل توضیح داده ام.
- Query Expresions - همان نوع ساختار یا املا دستورات linq که کمی پیشتر بررسی کردیم.
نظرات (۱)
با عرض سلام
از لطف شما متشکرم