آموزش Linq (بخش دوم)

آموزش Linq (بخش دوم)

بسم الله الرحمن الرحیم

 

مشاهده تمامی آموزش های دوره LINQ

آموزش LINQ

بخش دوم

LINQ

در این بخش عملگرهای استاندارد و اصلی لینک به همراه توابع تجمعی را آموزش خواهم داد.

 

 

منباب اطلاع: شما با استفاده از لینک می توانید بر روی نوع های جنریک های مختلف کوئری بزنید مثال:


IEnumerable<Customer> customerQuery = from cust in customers where cust.City == "London" select cust;
foreach (Customer customer in customerQuery)
{
Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}

بحثی در لینک وجود دارد به نام اجرای با تعویق، در واقع به این معنی است که هنگامی که شما یک دستور لنیک را می نویسید آن را فقط ایجاد می کنید و وقتی آن را با foreach می خوانید در آن زمان اجرا می کنید. متغییر پرس وجو هرگز نتایج را نگهداری نمی کند یعنی اگر شما یک دستور را بر روی پایگاه داده اجرا کنید و پایگاه داده دائما تغییر کند نتایج شما هم به ازای هر بار اجرا شدن (منظور از اجرا شدن مثلا همان دستور foreach است) نتایج متفاوتی خواهد داشت.

بعضی دستورات لینک صریحا اجرا می شوند مثل First و Average ،Max ،Count چون باید اجرا شوند تا بتوانند نتیجه را مشخص کنند و این نوع دستورات یک مقدار بر می گرداند به این عملگر ها، عملگرهای تجمعی می گویند.

بسم الله الرحمن الرحیم

 

مشاهده تمامی آموزش های دوره LINQ

آموزش LINQ

بخش دوم

LINQ

در این بخش عملگرهای استاندارد و اصلی لینک به همراه توابع تجمعی را آموزش خواهم داد.

 

 

منباب اطلاع: شما با استفاده از لینک می توانید بر روی نوع های جنریک های مختلف کوئری بزنید مثال:


IEnumerable<Customer> customerQuery = from cust in customers where cust.City == "London" select cust;
foreach (Customer customer in customerQuery)
{
Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}

بحثی در لینک وجود دارد به نام اجرای با تعویق، در واقع به این معنی است که هنگامی که شما یک دستور لنیک را می نویسید آن را فقط ایجاد می کنید و وقتی آن را با foreach می خوانید در آن زمان اجرا می کنید. متغییر پرس وجو هرگز نتایج را نگهداری نمی کند یعنی اگر شما یک دستور را بر روی پایگاه داده اجرا کنید و پایگاه داده دائما تغییر کند نتایج شما هم به ازای هر بار اجرا شدن (منظور از اجرا شدن مثلا همان دستور foreach است) نتایج متفاوتی خواهد داشت.

بعضی دستورات لینک صریحا اجرا می شوند مثل First و Average ،Max ،Count چون باید اجرا شوند تا بتوانند نتیجه را مشخص کنند و این نوع دستورات یک مقدار بر می گرداند به این عملگر ها، عملگرهای تجمعی می گویند.

Aggregate operation - عملگر های تجمعی

Count


 var evenNumQuery = from num in numbers where (num % 0 == 2) select num;
int evenNumCount = evenNumQuery.Count();

یا

int query = customers.Count();

LongCount


long query = customers.LongCount();

 

Sum


int[] integers = { 5, 3, 8, 9, 1, 7 };
int sum = integers.Sum();

 

Max , Min


int max = integers.Max();
int min = integers.Min();

average


double average = integers.Average();

 

همچنین می توانید با اجرای دستور ToList یا ToArray  دستورات لینک را فورا اجرا کنید

 

ToList()


 List<int> numQuery2 =  (from num in numbers where (num % 0 == 2) select num).ToList();

ToArray()


var numQuery3 = (from num in numbers where (num % 2 ==0 )  select num).ToArray();

برای نگهداری خروجی این کوئری هم می توانید از متغییری با نوع var و هم با ساختن یک لیست از نوع منبع این کار را انجام دهید.

متغییرهای نوع var  هنگامی که مقدار دهی می شوند نوعشان مشخص می شود.

 

عملگر های استاندارد پرس و جو

WHERE

همانطور که می دانید در قسمت where  می توانید شرط با && , || ترکیب کنید، فکر نکنم نیازی به مثال باشد.

 

OrderBy

عبارت پرس وجوی

توضیح

اسم متد

orderby

مقادیر را به ترتیب صعودی مرتب می کند

orderby

OrderBy …. Descending

مقادیر را به ترتیب نزولی مرتب می کند

OrderByDescending

Orderby …,….

یک مرتب سازی ثانویه را به ترتیب صعودی

انجام می دهد

ThenBy

OrderBy …., Descending….

یک مرتب سازی ثانویه را به ترتیب نزولی انجام

می دهد.

ThenByDescending

اعمال نمی شود

ترتیب عناصر واقع در یک مجموعه را برعکس.

می کند.

Reverse

 


 string[] words = { "the", "quick", "brown", "fox", "jumps" };
IEnumerable<string> query = from word in words orderby word.Length select word;
یا

IEnumerable<string> query = from word in words orderby word.Substring(0, 1) descending select word;

یا

IEnumerable<string> query = from word in words orderby word.Length, word.Substring(0, 1) select word;

یا

IEnumerable<string> query = from word in words orderby word.Length, word.Substring(0, 1) descending select word;

Select

یک روش استفاده از متد select همان روش معمولی است که عناصر را انتخاب می کنیم و روش دوم ساختن شی جدید با عناصر انتخاب شده است مثال:

روش اول


List<string> phrases = new List<string>() { "an apple a day", "the quick brown fox" };
var query = from phrase in phrases from word in phrase.Split(' ') select word;
foreach (string s in query)
Console.WriteLine(s);

/* This code produces the following output:
an
apple
a
day
the
quick
brown
fox
*/

 

روش دوم


 List<Customer> customers = new List<Customer>()
{
new Customer() {Name ="Esmaeil" , Family = "Sheidaei" , CustomerID =0 },
new Customer() {Name ="E$H" , Family = "Sheidaei" , CustomerID =2 },
var query = customers.Select((p,index) => new{position=index,p.Name, p.Family }
});

Projection

در بعضی موارد شما در انتخاب خروجی کوئری نیاز دارید که نوع خروجی را مشخص کنید، به این فرایند Projection گویند مثال:


var queryCustomersByCity = from cust in customers select cust.name;

 

 SelectMany

 


var query =customers.Where(c => c.Family == "sheidaei")
.SelectMany(c => c.Orders.Where(o => o.OrderDate.Year > 2010)
.Select(o => new { c.Family , o.OrderID })

اگر بخواهیم کد را به صورت دیگر بنویسیم (به روش Experssion)  نتیجه به این صورت می شود


var query = from c in customers where c.Family == "sheidaei" from o in c.Orders where o.OrderDate.Year > 2010
select new { c.Name, o.OrderID };

 

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس