در این بخش از دوره پیشرفته Entity Framework Core 9 به آموزش پیشرفته LINQ میپردازیم. LINQ یک تکنولوژی است که به شما این امکان را میدهد تا با استفاده از سینتکس سی شارپ، به دادهها کوئری بزنید. به عبارت دیگر، LINQ به شما اجازه میدهد تا عملیات مختلفی نظیر جستجو، فیلتر کردن، مرتبسازی و گروهبندی دادهها را با استفاده از یک زبان واحد انجام دهید.
LINQ مخفف “Language-Integrated Query” یک زبان کوئری نویسی قدرتمند است که به همراه نسخه ۳٫۵ فرم ورک .NET و ویژوال استودیو ۲۰۰۸ منتشر شد. LINQ را می توان برای کوئری زدن بر روی منابع داده مختلف در زبان برنامه نویسی سی شارپ و ویژوال بیسیک استفاده کرد.
LINQ ابزاری بسیار قدرتمند و انعطافپذیر برای کار با دادهها در C# است. این ابزار امکان دسترسی به دادهها، فیلتر کردن، مرتبسازی، و بسیاری از عملیات دیگر را با یک نحو یکپارچه و ساده فراهم میکند.
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 |
var list = student.OrderBy(p => p.Age).ToList();
var list = student.OrderByDescending(p=>p.Age).ToList();
var list = student.OrderByDescending(p=>p.Age).ThenBy(p=>p.Id).ToList();
var list = student.OrderByDescending(p=>p.Age).ThenByDescending(p=>p.Id).ToList();
var list = student.OrderBy(p=>p.Age).Reverse().ToList();
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();
دریافت یک ستون
var list = student.Select(p=> p.Name).ToList();
دریافت بیشتر از یک ستون
var list = student.Select(p=>new { p.Name, p.Family }).ToList();
var average = student.Average(x => x.Age).ToString();
var count = student.Count().ToString();
تعداد آیتم ها با شرط
var count = student.Count(p=>p.City=="Tehran").ToString();
var count= student.LongCount(p=>p.City=="Tehran").ToString();
var max= student.Max(p=>p.Age).ToString();
var min= student.Min(p=>p.Age).ToString();
var sum = student.Sum(p=>p.Id).ToString();
var res= student.First(p=>p.Id==1);
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);
در این مثال برسی کردیم آیا سن تمام کاربران بالای ۱۵ سال است یا خیر؟ مقدار True یا False برمیگرداند.
var check= student.All(p => p.Age >= 15);
برعکس اپراتور All که همه باید یک شرطی داشته باشند. اپراتور Any برسی میکند حداقل یک ایتم شرط را داشته باشد. مثلا در مثال زیر اگر حتی یک نفر از اهالی شهر قزوین باشد جواب True برمیگردد.
var check= student.Any(p => p.City == "Ghazvin");
var x=student.SingleOrDefault(x => x.Id==1);
var check= patients.Contains(x);