
آموزش پیشرفته LINQ
در این بخش از دوره پیشرفته Entity Framework Core 9 به آموزش پیشرفته LINQ میپردازیم. LINQ یک تکنولوژی است که به شما این امکان را میدهد تا با استفاده از سینتکس سی شارپ، به دادهها کوئری بزنید. به عبارت دیگر، LINQ به شما اجازه میدهد تا عملیات مختلفی نظیر جستجو، فیلتر کردن، مرتبسازی و گروهبندی دادهها را با استفاده از یک زبان واحد انجام دهید.
LINQ مخفف “Language-Integrated Query” یک زبان کوئری نویسی قدرتمند است که به همراه نسخه ۳٫۵ فرم ورک .NET و ویژوال استودیو ۲۰۰۸ منتشر شد. LINQ را می توان برای کوئری زدن بر روی منابع داده مختلف در زبان برنامه نویسی سی شارپ و ویژوال بیسیک استفاده کرد.
LINQ ابزاری بسیار قدرتمند و انعطافپذیر برای کار با دادهها در C# است. این ابزار امکان دسترسی به دادهها، فیلتر کردن، مرتبسازی، و بسیاری از عملیات دیگر را با یک نحو یکپارچه و ساده فراهم میکند.
مزایای LINQ
- یکپارچگی با زبان برنامهنویسی: LINQ به عنوان بخشی از زبان C# تعریف شده. و نیازی به یادگیری یک زبان جداگانه (مانند SQL) نیست.
- خوانایی بهتر: کدهای LINQ معمولاً سادهتر و خواناتر از کدهای سنتی برای دسترسی به دادهها هستند.
- پشتیبانی از چندین منبع داده: با استفاده از LINQ، شما میتوانید به سادگی به انواع مختلف منابع داده مانند XML، پایگاه دادهها، و اشیاء دسترسی پیدا کنید.
ساختار کلی LINQ
LINQ پرس و جوها را به زبان شیگرایی که با ساختار داده شما هماهنگ است مینویسد. این پرس و جوها معمولاً از دو بخش تشکیل شدهاند:
- بخش Query: که شامل توابع و اپراتورهایی مانند Where، Select، OrderBy و غیره میشود.
- بخش اجرای Query: زمانی که دادهها از منبع بازیابی میشوند و عملیات اجرا میشود.
اپراتورهای LINQ
بیش از ۵۰ اپراتور در LINQ وجود دارد. و در اصل هر یک از این اپراتورها یک فانکشن از LINQ میباشند. و می توان آن ها را بر اساس کاری که انجام می دهند به صورت زیر گروه بندی کرد:
| گروه | عملگرها |
|---|---|
| Filtering | Where, OfType |
| Sorting | OrderBy, OrderByDescending, ThenBy, ThenByDescending, Reverse |
| Grouping | GroupBy, ToLookup |
| Join | GroupJoin, Join |
| Projection | Select, SelectMany |
| Aggregation | Aggregate, Average, Count, LongCount, Max, Min, Sum |
| Quantifiers | All, Any, Contains |
| Elements | ElementAt, ElementAtOrDefault, First, FirstOrDefault, Last, LastOrDefault, Single, SingleOrDefault |
| Set | Distinct, Except, Intersect, Union |
| Partitioning | Skip, SkipWhile, Take, TakeWhile |
| Concatenation | Concat |
| Equality | SequenceEqual |
| Generation | DefaultEmpty, Empty, Range, Repeat |
| Conversion | AsEnumerable, AsQueryable, Cast, ToArray, ToDictionary, ToList |
اپراتورهای مرتب سازی
- اپراتور OrderBy آیتمها را بر اساس یک کلید مشخص به ترتیب صعودی مرتب میکند. یعنی از کم به زیاد.
var list = student.OrderBy(p => p.Age).ToList();- اپراتور OrderByDescending آیتمها را بر اساس یک کلید مشخص به ترتیب نزولی مرتب میکند. یعنی از زیاد به کم.
var list = student.OrderByDescending(p=>p.Age).ToList();- اپراتور ThenBy وقتی از OrderBy برای مرتبسازی استفاده کردید، اگر نیاز به مرتبسازی دوم یا بیشتر داشتید (مرتبسازی فرعی)، از ThenBy استفاده میکنید. این اپراتور آیتمهای همرده را بر اساس کلید دیگری به ترتیب صعودی مرتب میکند.
var list = student.OrderByDescending(p=>p.Age).ThenBy(p=>p.Id).ToList();- اپراتور ThenByDescending این اپراتور مشابه ThenBy است، اما مرتبسازی ثانویه را به ترتیب نزولی انجام میدهد.
var list = student.OrderByDescending(p=>p.Age).ThenByDescending(p=>p.Id).ToList();- اپراتور Reverse ترتیب آیتمهای یک مجموعه را معکوس میکند. این اپراتور به ترتیب آیتمها کاری ندارد، فقط ترتیب موجود را وارونه میکند.
var list = student.OrderBy(p=>p.Age).Reverse().ToList();اپراتورهای فیلتر
- اپراتور Where برای فیلتر کردن عناصر مجموعه بر اساس یک شرط یا چند شرط استفاده میشود. این اپراتور آیتمهایی را که شرط تعیین شده را برقرار میکنند، انتخاب میکند.
var list = student.Where(p=>p.City=="Tehran").ToList();And در اپراتور Where
var list = student.Where(p => p.City == "Tehran" && p.Age >= 40).ToList();Or در اپراتور Where
var list = student.Where(p => p.City == "Tehran" || p.Age >= 40).ToList();اپراتورهای Projection
- اپراتور Select برای فرافکنی و انتخاب یک یا چند خاصیت از هر آیتم در مجموعه استفاده میشود. این اپراتور هر آیتم از مجموعه اصلی را به آیتم جدیدی که توسط شما تعریف میشود، تبدیل میکند. اگر شما یک مجموعه از اشیاء داشته باشید، میتوانید تنها یک یا چند ویژگی از آنها را انتخاب کنید.
دریافت یک ستون
var list = student.Select(p=> p.Name).ToList();دریافت بیشتر از یک ستون
var list = student.Select(p=>new { p.Name, p.Family }).ToList();- اپراتور SelectMany در طول دوره مورد برسی قرار میگیرد.
اپراتورهای Aggregation
- اپراتور Average میانگین اعداد را در یک مجموعه محاسبه میکند. این اپراتور تنها برای مجموعههای عددی کاربرد دارد.
var average = student.Average(x => x.Age).ToString();- اپراتور Count تعداد آیتمهای موجود در یک مجموعه را برمیگرداند. اگر شرطی تعریف شود، فقط آیتمهایی که شرط را دارند شمارش میشوند.
var count = student.Count().ToString();تعداد آیتم ها با شرط
var count = student.Count(p=>p.City=="Tehran").ToString();- اپراتور LongCount مشابه Count است، اما برای زمانی استفاده میشود که تعداد آیتمهای مجموعه بسیار زیاد و فراتر از مقادیر پشتیبانیشده توسط int باشد. LongCount یک مقدار long برمیگرداند.
var count= student.LongCount(p=>p.City=="Tehran").ToString();- اپراتور Max بیشترین مقدار در مجموعه را برمیگرداند. این اپراتور برای مجموعههای عددی و همچنین سایر مجموعهها (مثلاً رشتهها) قابل استفاده است.
var max= student.Max(p=>p.Age).ToString();- اپراتور Min کمترین مقدار در مجموعه را برمیگرداند. مشابه Max، این اپراتور برای مجموعههای عددی و غیر عددی قابل استفاده است.
var min= student.Min(p=>p.Age).ToString();- اپراتور Sum مجموع اعداد موجود در یک مجموعه را محاسبه میکند. این اپراتور تنها برای مجموعههای عددی کاربرد دارد.
var sum = student.Sum(p=>p.Id).ToString();اپراتورهای Quantifiers
- اپراتور First اولین عنصری که یک شرط خاص را برآورده میکند، پیدا کرده و برمیگرداند. اگر چنین عنصری وجود نداشته باشد، یک استثنا (Exception) ایجاد میکند.
var res= student.First(p=>p.Id==1);- اپراتور FirstOrDefault مشابه First است، اما به جای اینکه در صورت عدم وجود عنصر شرطی یک استثنا ایجاد کند، مقدار پیشفرض (مثل null برای اشیاء یا مقدار ۰ برای عددیها) را برمیگرداند.
var res= student.FirstOrDefault(p=>p.Id==1);اپراتور Single عنصری را که شرط خاصی را برآورده میکند و به طور یگانه (یعنی تنها یک آیتم) در مجموعه وجود دارد، برمیگرداند. اگر بیشتر از یک عنصر پیدا شود یا هیچ عنصری پیدا نشود، یک استثنا ایجاد میشود.
var res= student.Single(p=>p.Id==1);اپراتور SingleOrDefault مشابه Single است، اما اگر عنصری پیدا نشود، مقدار پیشفرض (مثل null) را برمیگرداند.
var res= student.SingleOrDefault(p=>p.Id==1);- اپراتور All بررسی میکند که آیا همه آیتمهای یک مجموعه یک شرط خاص را برآورده میکنند یا نه. اگر همه آیتمها شرط را برقرار کنند، مقدار true برگردانده میشود؛ در غیر این صورت false.
در این مثال برسی کردیم آیا سن تمام کاربران بالای ۱۵ سال است یا خیر؟ مقدار True یا False برمیگرداند.
var check= student.All(p => p.Age >= 15);- اپراتور Any بررسی میکند که آیا حداقل یک آیتم در مجموعه یک شرط خاص را برآورده میکند. اگر حتی یک آیتم شرط را برقرار کند، مقدار true برگردانده میشود؛ در غیر این صورت false.
برعکس اپراتور All که همه باید یک شرطی داشته باشند. اپراتور Any برسی میکند حداقل یک ایتم شرط را داشته باشد. مثلا در مثال زیر اگر حتی یک نفر از اهالی شهر قزوین باشد جواب True برمیگردد.
var check= student.Any(p => p.City == "Ghazvin");- اپراتور Contains بررسی میکند که آیا یک آیتم خاص در مجموعه وجود دارد یا خیر. این اپراتور به دنبال یک مقدار مشخص در مجموعه میگردد و اگر آن مقدار را پیدا کند، true برمیگرداند.
var x=student.SingleOrDefault(x => x.Id==1);
var check= patients.Contains(x);سورس کد Linq
شما میتوانید سورس کد کامل Linq را از طریق گیت مشاهده کنید و یا اگر گیت کار نمیکنید، به راحتی آن را به صورت فایل فشرده (ZIP) دانلود کنید. فایلهای دانلودی شامل تمام بخشهای پروژه است و میتوانید آن را روی سیستم خود اجرا یا تغییر دهید.
































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