LINQ چیست؟
LINQ مخفف Language Integrated Query به معنای زبان پرس و جوی یکپارچه است که در دات نت نسخه 3.5 معرفی شد و به برنامه نویس اجازه میدهد دادهها را از هر نوع منبع دادهای بدون نیاز به دانستن یک زبان دیگر پرس و جو کند. پرس و جو فرایند به دست آوردن داده از منبع داده است. LINQ پرس و جوی داده از منابع دادهای مختلف را بسیار راحت کرده است. این زبان با زبانهای C# و VB آمیخته شده است و چندین کلمه کلیدی و دستور زبان برای استفاده از آن به دو زبان مذکور اضافه شده است. قبل از ورود LINQ، برنامه نویسان مجموعه کدهای مختلفی برای منابع دادهای مختلف مینوشتند. به عنوان مثال، برای پرس و جو در یک دیتابیس SQL از دستورات SQL یا برای فایلهای XML از Xpath استفاده میکردند. اما اکنون با استفاده از قدرت LINQ فقط لازم است با کلمات کلیدی LINQ و متدهای آن که در دات نت 3.5 معرفی شدند آشنا باشید.
چندین نوع LINQ به دلیل وجود provider های مختلف وجود دارد (شکل بالا). ویژوال استودیو دارای چندین provider مانند LINQ to Objects میباشد. در این قسمت تمرکز ما بر LINQ to Objects است که در پرس و جوی مجموعهای از اشیاء در کد شما که رابط IEnumerable<T> را پیاده سازی میکنند مورد استفاده قرار میگیرد. مثالهایی از این اشیاء، آرایهها و لیستها یا یک مجموعه سقارشی میباشد که شما ایجاد کردهاید. LINQ to SQL هم مخصوصاً طوری طراحی شده است که پرس و جوی دیتابیسهای SQL Server را راحت میکند. برای پرس و جوی فایلهای XML، میتوان از LINQ to XML استفاده نمود. همچنین میتوان LINQ را برای پرس و جوی انواع منابع دادهای دیگر بسط داد.
تکنیکهای پرس و جو به کار رفته در درسهای زیر، میتوانند در انواع مختلف LINQ مورد استفاده قرار بگیرند. شما می تونید با استفاده از متدهای الحاقی که در رابط IEnumerable<T> تعریف شدهاند از LINQ استفاده کنید. میتوانید این متدها را مستقیماً فراخوانی کنید، اما باید درباره عبارات لامبدا اطلاعاتی داشته باشید. همچنین میتوان از عبارات پرس و جو که دستور زبانی شبیه به SQL دارند استفاده کرد. عبارات پرس و جو ابزار مهمی هستند. عبارتهای پرس و جو ابزار اصلی برای دسترسی به دادهها با استفاده از LINQ به شمار میآیند گرچه شما میتوانید از متدهای الحاقی و عبارات لامبدا هم برای پرس و جو استفاده کنید.
زبان برنامه نویسی سی شارپ جز زبانهای روالمند است به این معنی که شما برای حل یک مسئله باید قدم به قدم کدهای آن را بنویسید ولی LINQ جز زبانهای غبر روالمند است به این معنی که شما به کامپیوتر می گویید که چه چیزی را لازم دارید (صرف نظر از الگوریتم آن) و کامپیوتر آن را برای شما فراهم میکند. قبلاً از LINQ ، شما فقط باید با استفاده از زبانهای روالمند در بین نتایج پرس و جو میکردید. برای مثال فرض کنید که قصد دارید لیست تمامی اعداد زوج داخل یک آرایه را بدست آورید . برای نوشتن راه حل مسئله بالا با استفاده از زبان برنامه نویسی سی شارپ کد شما چیزی شبیه کد زیر میشود :
List<int> evenNumbers = new List<int>(); int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; foreach(int num in numbers) { if (num % 2 == 0) evenNumbers.Add(num); }
با استفاده از کد بالا شما به کامپیوتر دستور میدهید که تک تک مقادیر داخل آرایه را بررسی کند و مقادیری که با شرط داده شده مطابقت دارند را به لیست اضافه کند. حالا مثال بالا را با استفاده از زبان LINQ به شکل زیر بازنویسی کردهایم :
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var evenNumbers = from n in numbers where n % 2 == 0 select n;
فعلاً به دستور زبان آن توجهی نکنید، در قسمتهای بعدی مفصل در این مورد توضیح میدهیم. اولین نکتهای که در کد بالا قابل توجه است اینست که، کد بالا نسبت به کد قبلی سادهتر و قابل فهم تر است.
بسیارعالی
سلام مهندس جان
تو SQL زمانی میخوایی جستجو کنی به دلیل اینکه Select به صورت گراف دادها رو جستجو میکنه سرعت بالاتری داره تا اینکه در #C میای تک تک دادها رو چک میکنیم. حالا میخواستم بدونم LINQ به چه صورتی کار میکنه و سرعتش نسبت به SQL و #C چطوره؟؟؟
سلام خسته نباشید خدمت آقای ابراهیمی
قسمت پرسش و پاسخ برام باز میکنه ولی وارد نمیشه میگه رمز اشتباه است ):
سلام
متاسفانه بانک سایت و پرسش و پاسخ یکی نیست و شما باید تو بخش پرسش و پاسخ هم ثبت نام کنید.
سلام و خسته نباشید خدمت آقای ابراهیمی
من یک فرم ایجاد کردم که داخلش دوتا باتون یکیش برای سوال بعدی ویکیش برای سوال قبلی
یک لیبل برای سوال
چهار ریدیوباتون برای گزینه های سوال
داخل دیتابیس چهار تا سوال طرح کردم و داخل دیتاگریدویو سلکت کردم
میخوام وقتی سوال اول اومد جای لیبل و ریدیو ها قرار گرفت
بعد انتخاب یکی از ریدیو ها و زدن باتون بعدی اون گزینه که انتخاب کردم دخیره بشه داخل دیتا گرید ویو …اگه نمیشه دخیره بشه داخل دیتا بیس
بعد که روی باتون قبلی کلیک کردم همون گزینه که انتخاب کرده بود تیکش خورده شده باشه
باتشکر
سلام، ممنون
سوال رو کپی و تو بخش پرسش و پاسخ مطرح بفرمایید
با تشکر
سلام
ممنون از مطالب عالیتون
اگه امکان داره این بخش LINQ رو بصورت PDF قرار بدین تا بتونیم پرینت بگیریم
سلام خسته نباشی مطالبتون خیلی عایست اگه امکان داره مطالب این بخش رو زیاد کنید
سلام…ممنون از لطفتون…چشم