CodeShot
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٪
این مطلب مفید بود؟
نشان کردن
مشاهده در Concept Hub ←