LINQ2 دقیقه مطالعه
LINQ چیست؟
قابلیتی در .NET برای Query گرفتن از Collectionها، دیتابیس و XML با سینتکس یکسان و خوانای C#.
چرا مهم است؟
LINQ کدهای تکراری foreach را حذف میکند و پایه Query گرفتن در Entity Framework Core است — تقریباً هیچ پروژه واقعی .NET بدون آن نیست.
تعریف کوتاه
LINQ یعنی نوشتن Query روی دادهها (Collection، دیتابیس، XML و …) با سینتکس یکسان و خوانای C#، بهجای SQL یا حلقههای دستی.
دو روش نوشتن
Query Syntax (شبیه SQL):
var result = from user in users
where user.Age > 18
select user;
Method Syntax (رایجتر در پروژههای واقعی):
var result = users.Where(u => u.Age > 18).Select(u => u.Name);
عملگرهای پرکاربرد
| عملگر | کاربرد |
|---|---|
Where |
فیلتر کردن |
Select |
تبدیل/انتخاب فیلد |
OrderBy / OrderByDescending |
مرتبسازی |
First / FirstOrDefault |
اولین مورد (اولی Exception میدهد، دومی مقدار پیشفرض) |
Single / SingleOrDefault |
دقیقاً یک رکورد؛ بیش از یک نتیجه = Exception |
Any |
بررسی وجود داده (بهتر از Count() > 0) |
Count |
تعداد عناصر |
GroupBy |
گروهبندی دادهها |
Join |
ترکیب دو مجموعه، مشابه JOIN در SQL |
Deferred Execution (اجرای تأخیری)
var query = users.Where(x => x.Age > 20); // هنوز اجرا نشده
foreach (var item in query) { } // اینجا اجرا میشود
var list = query.ToList(); // اجرای فوری
IEnumerable در برابر IQueryable
| IEnumerable | IQueryable |
|---|---|
| اجرا در Memory | Query به منبع داده (مثل SQL Server) منتقل میشود |
| مناسب Collectionهای معمولی | مناسب Entity Framework |
IEnumerable: Database → همه دادهها → Filter در Memory
IQueryable: Filter → Database → فقط داده مورد نیاز
Lambda در LINQ
x => x.Age > 18
تفاوتهای پرتکرار
- First vs Single — First فقط اولین مورد را میخواهد و چند نتیجه هم مشکلی نیست؛ Single انتظار دقیقاً یک نتیجه دارد و بیشتر از یکی Exception میدهد.
- Select vs Where — Where فیلتر میکند (تعداد رکورد کم میشود)؛ Select شکل داده را تغییر میدهد.
- ToList vs AsEnumerable — ToList بلافاصله Query را اجرا و نتیجه را در Memory ذخیره میکند؛ AsEnumerable فقط نوع را به IEnumerable تبدیل میکند و اجرا ممکن است به تعویق بیفتد.
نکته کلیدی: LINQ ابزار Query نویسی در C# است؛ IQueryable فیلتر را به دیتابیس منتقل میکند و IEnumerable در Memory کار میکند — در EF Core این تفاوت مستقیماً روی Performance اثر میگذارد.
خلاصه
- LINQ اجازه میدهد روی هر منبع داده با سینتکس یکسان C# فیلتر، مرتبسازی و تبدیل انجام دهیم.
- Query تا زمان پیمایش واقعی (Deferred Execution) اجرا نمیشود؛ ToList() اجرای فوری را تحمیل میکند.
- IQueryable کوئری را به دیتابیس منتقل میکند و IEnumerable آن را در Memory اجرا میکند.
حالا امتحان کن
🧩آزمون LINQ6 سؤال · نمره قبولی 60٪این مطلب مفید بود؟
☆نشان کردن