рдорд┐рдердХ # 1
рд╕рднреА LINQ рдХреНрд╡реЗрд░реА рдХреАрд╡рд░реНрдб 'var' рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, 'var' рдХреАрд╡рд░реНрдб рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп LINQ рдХреНрд╡реЗрд░реА рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ!
Var рдХреАрд╡рд░реНрдб рдФрд░ LINQ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдХреЙрдиреНрд╕реЗрдкреНрдЯ рд╣реИрдВред
Var рдХреАрд╡рд░реНрдб рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЖрд░рдВрднрд┐рдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ
(рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЯрд╛рдЗрдкрд┐рдВрдЧ) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб:
var s = "Hello";
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рд╕рдордХрдХреНрд╖:
string s = "Hello";
рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрдХреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕реА рдкреНрд░рдХрд╛рд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди:
string[] people = new [] { "Tom", "Dick", "Harry" }; var filteredPeople = people.Where (p => p.Length > 3);
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рд╕рдордХрдХреНрд╖:
string[] people = new [] { "Tom", "Dick", "Harry" }; IEnumerable<string> filteredPeople = people.Where (p => p.Length > 3);
рдЖрдк рдпрд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдЬреЛ рдХреБрдЫ рднреА
var рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдерд╛ рд╡рд╣
IEnumerable <string> рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдмрдирд╛рдирд╛ рдерд╛ред рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрд╕ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЫреЛрдЯрд╛ рд╣реИ; рджреВрд╕рд░реЛрдВ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдирд┐рд╣рд┐рдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛрдб рдХреЛ рдХрдо рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рд╕рдХрддреА рд╣реИред
рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ LINQ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ
рд▓рд┐рдП var рдХреАрд╡рд░реНрдб рдХреА
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ред рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм
рдПрдХ рдЕрдирд╛рдо рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИ :
string[] people = new [] { "Tom", "Dick", "Harry" }; var filteredPeople = people.Select (p => new { Name = p, p.Length });
рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ LINQ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рдЕрдирд╛рдо рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ:
var person = new { Name = "Foo", Length = 3 };
рдорд┐рдердХ # 2
рд╕рднреА LINQ рдХреНрд╡реЗрд░реА рдХреНрд╡реЗрд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
LINQ рдХреНрд╡реЗрд░реА рд▓рд┐рдЦрдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:
рд▓реИрдореНрдмреНрдбрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░
рдХреНрд╡реЗрд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕ ред
рд▓реИрдореНрдмреНрдбрд╛ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдЙрджрд╛рд╣рд░рдг:
string[] people = new [] { "Tom", "Dick", "Harry" }; var filteredPeople = people.Where (p => p.Length > 3);
рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рдПрдХ рдЙрджрд╛рд╣рд░рдг, рд▓реЗрдХрд┐рди
рдХреНрд╡реЗрд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
string[] people = new [] { "Tom", "Dick", "Harry" }; var filteredPeople = from p in people where p.Length > 3 select p;
рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреНрд╡реЗрд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд▓реИрдореНрдмреНрдбрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреНрд╡реЗрд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпрдХреНрдд рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рд▓реИрдореНрдмреНрдбрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рднреА рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрд╡реЗрд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕
рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╢реНрд░реЗрдгреА рдЪрд░ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рд░реЗрдВрдЬ
p рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рддрд╛рдХрд┐ рджреЛрдиреЛрдВ рдкреНрд░рд╢реНрди рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рд░рд▓ рджрд┐рдЦреЗрдВ)ред
рд╕рднреА рдСрдкрд░реЗрдЯрд░ рдХреНрд╡реЗрд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрди рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдкреВрд░рдХ рд╣реЛрдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рд╕рднреА рд╕реЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреНрд╡реЗрд░реА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдорд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдорд┐рдердХ # 5 рджреЗрдЦреЗрдВ)ред
рдорд┐рдердХ # 3
рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рдорд╛рди рдПрдХ рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
var рдХреНрд╡реЗрд░реА = c рд╕реЗ db.Customers рдореЗрдВ c рдЪреБрдиреЗрдВред
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
from c in db.Customers select c
рдмрд╣реБрдд рд╡рд╛рдЪрд╛рд▓ рд╣реИ! рдЖрдк рдмрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
db.Customers
рдЗрд╕реА рддрд░рд╣, рдирд┐рдореНрди LINQ XML рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП:
var xe = from e in myXDocument.Descendants ("phone") select e;
рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
var xe = myXDocument.Descendants ("phone");
рдФрд░ рдпрд╣ рдЕрдиреБрд░реЛрдз:
Customer customer = (from c in db.Customers where c.ID == 123 select c) .Single();
рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
Customer customer = db.Customers.Single (c => c.ID == 123);
рдорд┐рдердХ # 4
LINQ рдореЗрдВ SQL рдХреНрд╡реЗрд░реА рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ LINQ рдХреНрд╡реЗрд░реА рдХреЛ SQL рдХреНрд╡реЗрд░реА рдХреЗ рд╕рдорд╛рди рд╣реА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
LINQ рдФрд░ SQL рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВред
рд╢рд╛рдпрдж LINQ рдХреЗ рдЙрддреНрдкрд╛рджрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдмрд╛рдзрд╛ "SQL рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╕реЛрдЪреЗрдВ" рд╕рд┐рдВрдбреНрд░реЛрдо рд╣реИ: SQL рдореЗрдВ рдХреНрд╡реЗрд░реА рдХреЛ рдорд╛рдирд╕рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ LINQ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдо рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рдВрдШрд░реНрд╖ рд╣реЛрдЧрд╛!
рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ
LINQ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ
рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдЙрдирдХреЗ SQL рд╕рдордХрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХрдо рд╕рдорд╛рдирддрд╛ рд╣реЛрдЧреАред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡реЗ рдмрд╣реБрдд рд╕рд░рд▓ рднреА рд╣реЛрдВрдЧреЗред
рдорд┐рдердХ # 5
LINQ рдореЗрдВ рдХреБрд╢рд▓ рдЬреЙрдЗрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЬреЙрдЗрди рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдПред рдЬрдм рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реА рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЬреНрд╡рд╛рдЗрди рдХреАрд╡рд░реНрдб рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ: рдЬреНрд╡рд╛рдЗрди рдСрдкрд░реЗрд╢рди рдХреЛ рдХрдИ рдбреЗрдХреНрд╕ рдФрд░ рд╕рдмрдХреНрд╡реЗрд░реАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдИ рд╕реЗ-рдПрд╕ рдФрд░ рд╕рдмрдХреНрд╡реЗрд░реА рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИрдВ: рдЖрдк рдЧреИрд░-рд╕рдорд╛рди-рдЬреБрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ
рдХрдиреЗрдХреНрд╢рди рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, LINQ to SQL рдФрд░ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ, рдЖрдк
рдПрд╕реЛрд╕рд┐рдПрд╢рди рдХреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ рдЬреЛ рдЬреБрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИрдВ! рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрди рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдирд╛рдо рдФрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдПрдХ рднреА рдЦрд░реАрдж рдирд╣реАрдВ рдХреА рд╣реИ:
from c in db.Customers where !c.Purchases.Any() select new { c.ID, c.Name }
рдпрд╛ рдРрд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдирд┐рдХрд╛рд▓реЗрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ $ 1000 рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЦрд░реАрджрд╛рд░реА рдирд╣реАрдВ рдХреА рд╣реИ:
from c in db.Customers where !c.Purchases.Any (p => p.Price > 1000) select new { c.ID, c.Name }
рдзреНрдпрд╛рди рджреЗрдВ, рд╣рдордиреЗ рд▓реИрдореНрдмреНрдбрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдХреНрд╡реЗрд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдорд┐рд▓рд╛рдпрд╛ред рдПрд╕реЛрд╕рд┐рдПрд╢рди рдХреЗ рдЧреБрдгреЛрдВ, рдХрдиреЗрдХреНрд╢рди рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рдорд┐рд╢реНрд░рд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП,
LINQPad рджреЗрдЦреЗрдВред
рдорд┐рдердХ # 6
рдЪреВрдВрдХрд┐ SQL рдХреНрд╡реЗрд░реА рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдлреНрд▓реИрдЯ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╣реИ, LINQ рдХреНрд╡реЗрд░реА рдмрдирд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╡реЗ рдПрдХ рдлреНрд▓реИрдЯ рдбреЗрдЯрд╛рд╕реЗрдЯ рднреА рд▓реМрдЯрд╛ рд╕рдХреЗрдВред
рдпрд╣ рдорд┐рдердХ # 4 рдХрд╛ рдПрдХ рдХреЛрд╢ рд╣реИред LINQ рдХрд╛ рдПрдХ рдореБрдЦреНрдп рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдПрд╕реЛрд╕рд┐рдПрд╢рди рдЧреБрдгреЛрдВ (рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрд░рдЪрд┐рдд рд╡рд╕реНрддреБ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ;
- рдСрдмреНрдЬреЗрдХреНрдЯ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╕реАрдзреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░реЗрдВред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, 1 рдФрд░ 2 рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди 1 рдорджрдж рдХрд░рддрд╛ рд╣реИ 2. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк WA рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЙрдирдХреА рдЦрд░реАрдж рдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
from c in db.Customers where c.State == "WA" select new { c.Name, c.Purchases
рдЗрд╕ рдХреНрд╡реЗрд░реА рдХрд╛ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдкрд░рд┐рдгрд╛рдо рдлреНрд▓реИрдЯ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред
рд╣рдо
рд╕рдВрдШреЛрдВ рдХреЗ
рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
from c in db.Customers where c.State == "WA" select new { c.Name, Purchases = db.Purchases.Where (p => p.CustomerID == c.ID) }
рдорд┐рдердХ # 7
LINQ to SQL рдореЗрдВ рдмрд╛рд╣рд░реА рдЬреЙрдЗрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ DefaultIfEmpty () рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ
рдлреНрд▓реИрдЯ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╕рдЪ рд╣реИред рдкрд┐рдЫрд▓реЗ рдорд┐рдердХ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рдПрдХ рдмрд╛рдПрдВ рдмрд╛рд╣рд░реА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ рдФрд░
DefaultIfEmpty рдХрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдорд┐рдердХ # 8
LINQ to SQL рдпрд╛ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреНрд╡реЗрд░реА рдХреЗрд╡рд▓ рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓реЗрдЧреА рдЬрдм рд╡реЗ рдПрдХ рдЪрд░рдг рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдереЗред
LINQ рдПрдХ рдЖрд╕реНрдердЧрд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛
рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐
рдЧрдгрдирд╛ рд╕рдордп рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЙрддрдиреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рддрдирд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рддрдХ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗ, рддрдм рддрдХ рд╡реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдирд╣реАрдВ рдЖрддреЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╡реЗрд░реА рдЙрди рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рджреЛ рдЦрд░реАрджрд╛рд░реА рдХреА рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдирд╛рдо 'A' рдЕрдХреНрд╖рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╣рдордиреЗ рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЛ рддреАрди рдЪрд░рдгреЛрдВ рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИ:
var query = db.Customers.Where (c => c.Name.StartsWith ("A")); query = query.Where (c => c.Purchases.Count() >= 2); var result = query.Select (c => c.Name); foreach (string name in result)
рдорд┐рдердХ # 9
рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдзрд┐ 'рдирдП' рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рддреЛ рдХреЛрдИ рдЕрдиреБрд░реЛрдз рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдЪрд╛рд▓ рдХреЛ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирд┐рдпрдорд┐рдд
рдирд╛рдо рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реИ:
public IQueryable<NameDetails> GetCustomerNamesInState (string state) { return from c in Customer where c.State == state select new NameDetails { FirstName = c.FirstName, LastName = c.LastName }; }
NameDetails рд╡рд░реНрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
public class NameDetails { public string FirstName, LastName; }
рдорд┐рде # 10
LINQ to SQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ DataContext рд╡рд░реНрдЧ рдХреЗ рдПрдХрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреВрд░реЗ рдЬреАрд╡рди рдореЗрдВ рдЗрд╕ рд╕рд╛рдЭрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреА рд░рдгрдиреАрддрд┐ рд╕реЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рдорд┐рд▓реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрд░реЛрдз рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рдкрд░ DataContext рдЗрдВрд╕реНрдЯреЗрдВрд╕ рджреНрд╡рд╛рд░рд╛ рдореЙрдирд┐рдЯрд░ рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
DataContext рд╡рд░реНрдЧ рдХреЗ рдПрдХрд▓ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рдиреА рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред
рд╕рд╣реА рд░рдгрдиреАрддрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕рдХрд╛ рдЬреАрд╡рди рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣реА рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ LINQ рдХреНрд╡рд┐рдЬрд╝ (рдкрд░реАрдХреНрд╖рдг) рдХрд╛ рднреА рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ ( рдЙрддреНрддрд░ ) рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛ ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдЕрд▓рдмрд╣рд╛рд░реА рджреНрд╡рд╛рд░рд╛ рдкреВрдЫреЗ рдЧрдП рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдмреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛!