مزایای استفاده از 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