PDA

View Full Version : آموزش LINQ قسمت چهارم



zkazemi
دوشنبه 19 مرداد 1388, 13:10 عصر
عملگر های کوئری استاندارد
دستور select
این دستور جهت مقادیر خروجی را به شکل تعیین شده به بر می گرداند . کد زیر نحوه استفاده از دستور select را نشان می دهد . در این مثال سه ستون fistname و lastname و emailaddress در نمایش خروجی استفاده شده اند.



var query =
from c in contact
where c.FirstName.StartsWith("S")
select new {c.FirstName, c.LastName, c.EmailAddress}


همان کوئری با سینتکس متد به صورت زیر است :



var query =
contact.Select(c => new {
c.FirstName, c.Lastname, c.EmailAddress}
).Where(c => c.FirstName.StartsWith("S"));


دستور where
این دستور جهت فیلتر گذاری بر روی منبع داده مورد نظر استفاده می شود.
کد زیر سینتکس کوئری نحوه استفاده از دستور where رانشان می دهد:



IEnumerable<string> query =
from c in contact
where c.FirstName.StartsWith("S")
select new {c.FirstName, c.LastName, c.EmailAddress}


کد زیر سینتکس متد نحوه استفاده از دستور where را نشان می دهد:



var query =
contact.Select(c => new {
c.FirstName, c.Lastname, c.EmailAddress}
).Where(c => c.FirstName.StartsWith("S"));


انواع عملگر های مرتب سازی
عملگر های orderBy,Reverse,OrdrByDescending ,ThenBy و ThenByDescending امکان مرتب سازی نتایج به صورت نزولی و صعودی را فراهم می کنند.این عملگر ها چندین انتخاب برای مرتب سازی اولیه و ثانویه در اختیار شما قرار می دهند.
OrderBy


این عملگر به طور پیش فرض جهت مرت سازی صعودی مقادیر نتیجه استفاده می شود.



سینتکس کوئری




var query =
from c in contact
where c.FirstName.StartsWith("S")
orderby c.LastName
select new {c.FirstName, c.LastName, c.EmailAddress}



سینتکس متد




var query =
contact.Select(c => {
c.FirstName, c.LastName, c.EmailAddress }).Where(
c => c.FirstName.StartsWith("S")).OrderBy(
c => c.FirstName);

عملگرOrderBy…Descending
جهت مرتب سازی به صورت نزولی مورد استفاده قرار می گیرد.
سینتکس کوئری :



IEnumerable<string> query =
from c in contact
where c.FirstName.StartsWith("S")
orderby c.LastName descending
select new {c.FirstName, c.LastName, c.EmailAddress}


سینتکس متد:



var query =
contact.Select(c => {
c.FirstName, c.LastName, c.EmailAddress} ).Where(
c => c.FirstName.StartsWith("S")).OrderByDescending(


c => c.FirstName);


عملگر TehnBy
این عملگر همراه با OrderBy برای مرتب سازی صعودی ثانویه استفاده می شود.. به این معنا که در sql شما در مقابل دستور orderby هر تعداد نام ستون را قید می کردید . اما در زبان LINQ در صورتی که بخواهید مرتب سازی را برای بیش از یک ستون داشته باشید نیاز است عملگر ThenBy استفاده نمایید.
سینتکس کوئری:



IEnumerable<string> query =
from c in contact
where c.FirstName.StartsWith("S")
orderby c.LastName
thenby c.FirstName
select new {c.FirstName, c.LastName, c.EmailAddress}


عملگر ThenByDescending
این عملگر نیز مانند عملگر قبل است با این تفاوت که با عملگر Order … Descending استفاده می شود.
سینتکس کوئری:



IEnumerable<string> query =
(from c in contact
where c.FirstName.StartsWith("S")
orderby c.LastName descending select new {c.FirstName, c.LastName, c.EmailAddress}).@@ta
ThenByDescending(c => c.FirstName);


سینتکس متد:



var query =
contact.Select(c => {
c.FirstName, c.LastName, c.EmailAddress} ).Where(
c => c.FirstName.StartsWith("S")).OrderBy(
c => c.FirstName).ThenByDescending(c =>
c.FirstName);


عملگر reverse
شاید تصور کنید این عملگر معادل مرتب سازی نزولی است .در حالی که اینطور نیست . این عملگر هرچه که به عنوان نتیجه از یک منبع داده است را معکوس می کند.یعنی نتیجه حاصله الزاما مرتب نیست ، بلکه معکوس است .



string[] names = {"Alex", "Chuck", "Dave", "Dinesh",
"Joe", "John", "Sarah", "Scott", "Steve"}
string[] reversednames = names.Reverse().ToArray();
foreach (string str in reversednames)
listbox1.Items.Add(chr)


خروجی کد بالا

Steve
Scott
Sarah
John
Joe
Dinesh
Dave
Chuck


Alex

این عملگر محدود است وبرای LINQ to SQL قابل استفاده نیست .
عملگر های joining
عملگر Join
این عملگر همانند inner join در زبان T-SQL است که یک منبع داده را به منبع داده دوم متصل می کند و مقادیر با توجه به یک شرط مطرح شده که برای هر دو منبع داده صادق است را بر می گرداند.برای مثال جدول مشتری و سفارشات مشتری را به هم متصل می کنید . و از یک کلید که در هردو جدول وجود دارد جهت بازگشت مقادیر استفاده می کنید.
مثال



from c in contact
join emp in employee on c.ContactID equals emp.ContactID
where c.FirstName.StartsWith("S")
orderby c.LastName
select new {emp.EmployeeID, c.FirstName, c.LastName,
c.EmailAddress, emp.Title, emp.HireDate}


اتصال می تواند به بیش از یک منبع داده باشد .
مثال


مثال

from c in contact
join emp in employee on c.ContactID equals emp.ContactID
join ind in individual on c.ContactID equals ind.ContactID
join cust in customer on ind.CustomerID equals cust.CustomerID
where c.FirstName.StartsWith("S")
orderby c.LastName
select new {emp.EmployeeID, c.FirstName, c.LastName, c.EmailAddress,
emp.Title, emp.HireDate, cust.AccountNumber}


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



var query =
contact.Join(employee, con => con.ContactID,
emp => emp.ContactID, (con, emp) => new
{ Contact = con.FirstName, Employee} );