مزایا و معایب LINQ

مزایای استفاده از Linq چیست ؟

  • ارائه یک ساختار (زبان پرس و جو) برای پرس و جو کردن اطلاعاتی از قبیل پایگاه داده ها ، XML ها ، ADO.NET Dataset ، وب سرویس ها و سایر اشیا مانند آرایه ها و لیست ها
  • کنترل نوع (type checking) کامل که در Linq می باشد همراه با IntelliSense کمک می کند تا خطاهای زمان اجرا به شدت کاهش بیابند
  • ارائه توابع مانند filtering ، مرتب سازی و grouping با حداقل کدنویسی
  • امکان استفاده مجدد از جست و جوی ایجاد شده
  • امکان دیباگ کردن با دیباگر .NET

 

معایب Linq چیست ؟

  • Linq برای نوشتن جست و جوهای پیچیده گزینه مناسبی نیست
  • عدم ارائه تمامی توانایی های SQL ، مانند کش کردن execution plan ها در stored procedure
  • در صورتی که شما جست و جوی اصولی ننوشته باشید Performance پائین تری خواهید داشت.
  • اگر قصد ویرایش در جست و جو را داشته باشید باید برنامه را از نو کامپایل کرده و به سرور منتقل نمایید.

 

چه روش هایی برای نوشتن جست و جو با Linq وجود دارد ؟
برای اینکار 3 روش داریم

  • Query Expression : این روش شباهت زیادی به جست و جو نوشتن با SQL دارد. خروجی این روش از نوع query object می باشد که اغلب از جنس IEnumerable<T> و یا IQueryable<T> خواهد بود. کد نویسی در این روش آسانتر و قابلیت خواندن و درک بیشتری دارد. Query Expression در نهایت به Method Invocation تبدیل می شود

ساختار کلی Query Expression :

from [identifier]

in [source collection]

let [expression]

where [boolean expression]

order by [expression(ascending/descending)]

select [expression]

group [expression] by [expression]

into [expression]

یک مثال :

// Datasource

List<int> numbers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Query based syntax

IEnumerable<int> query =

from num in numbers

where num > 5 && num < 10

select num;

//result: 6,7,8,9 

  • Method Invocation : این روش از روش قبلی پیچیده تر می باشد و علت آن نیز استفاده از عبارت های lambda برای پرس و جو می باشد. این روش برای CLR قابل فهم تر و آسانتر می باشد .خروجی این روش نیز از نوع query object می باشد که اغلب از جنس IEnumerable<T> و یا IQueryable<T> خواهد بود.

ساختار کلی Method Invocation :

[source collection]

.Where [boolean expression]

.OrderBy [expression(ascending/descending)]

.Select [expression]

.GroupBy [expression] 

یک مثال

// Datasource

List<int> numbers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Method based syntax

IEnumerable<int> query = numbers.Where(num => num > 5 && num < 10);

//result: 6,7,8,9 

  • ساختار Mixed Syntax: با ترکیب دو ساختار بالا ( با استفاده از قرار دادن پرس و جو درون یک جفت پارانتز و فراخوانی توابع ) می توان شکل سومی نیز مانند زیر داشت.

// Datasource

List<int> numbers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Mixed syntax

int query = (from  num  in numbers

where num > 5 && num < 10

select num).Count();

//result: 4 

درباره‌ رضا رحیمی

رضا رحیمی
در زندگی‌ام هیچ‌چیز را هیجان‌انگیزتر از آموختن نمی‌دانم . به xp , اسکرام ، تست ، برنامه نویسی ، تدریس ، تجارت های آنلاین و هر آنچه که به اینترنت مربوط می باشد علاقمندم. این سایت محل یادداشت های شخصی بنده می باشد

جوابی بنویسید

ایمیل شما نشر نخواهد شدخانه های ضروری نشانه گذاری شده است. *

*