C#.NET рдореЗрдВ LINQ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ

рдкрд░рд┐рдЪрдп

╨Т рдпрд╣ рд▓реЗрдЦ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ LINQ рдкреНрд░рд╢реНрди.
рдпрд╣рд╛рдВ рд╣рдо рдХреЛрдб рдЕрдиреБрдХреВрд▓рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ LINQ рдкреНрд░рд╢реНрди.

рд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ LINQ(рднрд╛рд╖рд╛-рдПрдХреАрдХреГрдд рдХреНрд╡реЗрд░реА) рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рднрд╛рд╖рд╛ рд╣реИред

╨Р LINQ рд╕реЗ SQL DBMS рдореЗрдВ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдПрдХ рддрдХрдиреАрдХ рд╣реИред рдпрд╣ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрди рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрд╛ рдЧрдпрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, DBMS рд╕реЗ рд╣рдорд╛рд░рд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдПрдордПрд╕ SQL тАЛтАЛрд╕рд░реНрд╡рд░.

рд╣рд╛рд▓рд╛рдВрдХрд┐, LINQ рдкреНрд░рд╢реНрди рд╕рд░реНрд╡реЛрддреНрддрдо рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╢рдмреНрджреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрди, рдЬрд┐рд╕реЗ рдПрдХ рдЕрдиреБрднрд╡реА рдбреАрдмреАрдП рдЕрдиреБрдХреВрд▓рди рдХреА рд╕рднреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрди:

  1. рдЗрд╖реНрдЯрддрдо рдХрдиреЗрдХреНрд╢рди (рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ) рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ (рдХрд╣рд╛рдВ)
  2. рдХрдиреЗрдХреНрд╢рди рдФрд░ рд╕рдореВрд╣ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрдИ рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ
  3. рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрдИ рднрд┐рдиреНрдирддрд╛рдПрдБ IN рдкрд░ рдореМрдЬреВрдж рд╣реИ╨╕ рдЕрдВрджрд░ рдирд╣реА, <> рдЪрд╛рд▓реВ рдореМрдЬреВрдж рд╣реИ
  4. рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ, рд╕реАрдЯреАрдИ, рддрд╛рд▓рд┐рдХрд╛ рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдордзреНрдпрд╡рд░реНрддреА рдХреИрд╢рд┐рдВрдЧ
  5. рд╡рд╛рдХреНрдп рдХрд╛ рдкреНрд░рдпреЛрдЧ (рд╡рд┐рдХрд▓реНрдк) рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рде рдореЗрдВ (...)
  6. рдЪрдпрди рдХреЗ рджреМрд░рд╛рди рдЕрдирд╛рд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд░реАрдбрд┐рдВрдЧ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рдПрдХ рд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдкрд░рд┐рдгрд╛рдореА рдореБрдЦреНрдп рдкреНрд░рджрд░реНрд╢рди рдмрд╛рдзрд╛рдПрдБ рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрди рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп LINQ рдкреНрд░рд╢реНрди рд╣реИрдВ:

  1. рдПрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛ рдЪрдпрди рддрдВрддреНрд░ рдХрд╛ рд╕рдореЗрдХрди
  2. рдХреЛрдб рдХреЗ рд╕рдорд╛рди рдмреНрд▓реЙрдХреЛрдВ рдХреА рдирдХрд▓ рдХрд░рдирд╛, рдЬреЛ рдЕрдВрддрддрдГ рдХрдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд░реАрдбреНрд╕ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ
  3. рдмрд╣реБ-рдШрдЯрдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд╕рдореВрд╣ (рддрд╛рд░реНрдХрд┐рдХ "рдФрд░" рдФрд░ "рдпрд╛") - рдФрд░ ╨╕ OR, рдЬрдЯрд┐рд▓ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдпреЛрдЬрди, рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░, рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдЧреИрд░-рдХреНрд▓рд╕реНрдЯрд░ рдЗрдВрдбреЗрдХреНрд╕ рд╡рд╛рд▓реЗ, рдЕрдВрддрддрдГ рдХреНрд▓рд╕реНрдЯрд░реНрдб рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реНрдХреИрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ (рд╕реВрдЪрдХрд╛рдВрдХ рд╕реНрдХреИрди) рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рджреНрд╡рд╛рд░рд╛
  4. рд╕рдмрдХреНрд╡реЗрд░реАрдЬрд╝ рдХреА рдбреАрдк рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рдмрд╣реБрдд рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдмрдирд╛ рджреЗрддреА рд╣реИ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрдерди рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдУрд░ рд╕реЗ рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдбреАрдмреАрдП

рдЕрдиреБрдХреВрд▓рди рдХреЗ рддрд░реАрдХреЗ

рдЕрдм рд╕реАрдзреЗ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред

1) рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдХреНрд░рдордг

рдореБрдЦреНрдп рдЪрдпрди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдХреНрд╕рд░ рдкреВрд░реА рдХреНрд╡реЗрд░реА рдПрдХ рдпрд╛ рджреЛ рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛рдУрдВ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рд▓реЛрдЧ-рд╕рдВрдЪрд╛рд▓рди) рдХреЗ рдЖрд╕рдкрд╛рд╕ рдФрд░ рд╢рд░реНрддреЛрдВ рдХреЗ рдПрдХ рдорд╛рдирдХ рд╕реЗрдЯ (IsClosed, Canceled, Enabled, status) рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рдкрд╣рдЪрд╛рдиреЗ рдЧрдП рдирдореВрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдпрд╣ рд╕рдорд╛рдзрд╛рди рддрдм рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм рдЗрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХрд╛ рдЪрдпрди рдХреНрд╡реЗрд░реА рдореЗрдВ рд▓реМрдЯрд╛рдП рдЧрдП рд╕реЗрдЯ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╕реАрдорд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 500000 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЗрд╡рд▓ 2000 рд╕рдХреНрд░рд┐рдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВред рддрдм рдПрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЪрдпрдирд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рд╣рдореЗрдВ рдмрдЪрд╛рдПрдЧрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╕реНрдХреИрди рдПрдХ рдмрдбрд╝реА рдореЗрдЬ рдкрд░ рдФрд░ рдЖрдкрдХреЛ рдЧреИрд░-рд╕рдВрдХреБрд▓ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рд╕рд╛рде рд╣реА, рдЗрдВрдбреЗрдХреНрд╕ рдХреА рдХрдореА рдХреЛ рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рджреГрд╢реНрдп рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдПрдордПрд╕ SQL тАЛтАЛрд╕рд░реНрд╡рд░:

  1. sys.dm_db_missing_index_groups
  2. sys.dm_db_missing_index_group_stats
  3. sys.dm_db_missing_index_details

рд╕реНрдерд╛рдирд┐рдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╕рднреА рджреГрд╢реНрдп рдбреЗрдЯрд╛ рдореЗрдВ рд▓реБрдкреНрдд рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдХреИрд╢рд┐рдВрдЧ рдЕрдХреНрд╕рд░ рдЦрд░рд╛рдм рд▓рд┐рдЦреЗ рдЧрдП рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ LINQ рдкреНрд░рд╢реНрди ╨╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрди.

рдЬреИрд╕рд╛ рдХрд┐ рдЬреАрд╡рди рдХреЗ рдХрдареЛрд░ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдХрд┐рд╕реА рд╡реНрдпрд╡рд╕рд╛рдп рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рд╕реАрдорд╛ рддрдХ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП, рднрд╛рд░реА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдХреНрд╕рд░ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдЪрд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╣рдореЗрд╢рд╛ рдирд╡реАрдирддрдо рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрддрд░ рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрддрдГ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рджреЗрд░реА рдХрд░рдХреЗ рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред

рдпрд╣ рднреА рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЦреЛрдЬ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдПрдБ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ MS SQL рдЕрдиреБрдХреВрд▓рди рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрди рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  1. рдпрджрд┐ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рдорд╛рди рд╕реЗрдЯ рд╡рд╛рд▓реЗ рдЗрдВрдбреЗрдХреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВ
  2. рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдиреБрдХреНрд░рдордг рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЕрдиреБрдХреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ)ред рдпрд╣рд╛рдВ).

2) рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдПрдХ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░рдирд╛

рдХрднреА-рдХрднреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдХреБрдЫ рдлрд╝реАрд▓реНрдб, рдЬреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИрдВ, рдХреЛ рдПрдХ рдирдП рдлрд╝реАрд▓реНрдб рдХреЛ рд╢реБрд░реВ рдХрд░рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рд╕реНрдерд┐рддрд┐ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдпрд╛ рддреЛ рдмрд┐рдЯ рдпрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг:

рдмрдВрдж рд╣реИ = 0 рдФрд░ рд░рджреНрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ = 0 рдФрд░ рд╕рдХреНрд╖рдо = 0 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╕реНрдерд┐рддрд┐ = 1.

рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реНрдерд┐рддрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпреЗ рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рднрд░реА рд╣реБрдИ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред

рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдореМрд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЧрдгрдирд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВред

3) рджреГрд╢реНрдп рдХрд╛ рднреМрддрд┐рдХреАрдХрд░рдг

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрдВ LINQ рдкреНрд░рд╢реНрди рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ, рд╕реАрдЯреАрдИ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдЪрд░ рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ - рдЕрдиреБрдХреНрд░рдорд┐рдд рджреГрд╢реНрдпред

рд╕реНрдерд┐рддрд┐ рд╕рдореВрд╣ (рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ) рдмрдВрдж рд╣реИ = 0 рдФрд░ рд░рджреНрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ = 0 рдФрд░ рд╕рдХреНрд╖рдо = 0 (рдпрд╛ рдЕрдиреНрдп рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ) рдПрдХ рдмрдбрд╝реЗ рд╕реЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдХреИрд╢ рдХрд░рддреЗ рд╣реБрдП, рдЕрдиреБрдХреНрд░рдорд┐рдд рджреГрд╢реНрдп рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдмрди рдЬрд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдореВрд░реНрдд рд░реВрдк рджреЗрддреЗ рд╕рдордп рдХрдИ рдкреНрд░рддрд┐рдмрдВрдз рд╣реЛрддреЗ рд╣реИрдВ:

  1. рдЙрдкрдкреНрд░рд╢реНрдиреЛрдВ, рдЙрдкрд╡рд╛рдХреНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореМрдЬреВрдж рд╣реИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ
  2. рдЖрдк рд╡рд╛рдХреНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╕рдВрдШ, рдпреВрдирд┐рдЕрди рдСрд▓, рдЕрдкрд╡рд╛рдж, рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдХрд╛рдЯрдирд╛
  3. рдЖрдк рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрдХреЗрдд рдФрд░ рдЦрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╡рд┐рдХрд▓реНрдк
  4. рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ
  5. рд╡рд┐рднрд┐рдиреНрди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ

рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЕрдиреБрдХреНрд░рдорд┐рдд рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рдн рдХреЗрд╡рд▓ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдХреЗ рд╣реА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рджреГрд╢реНрдп рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдЗрди рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рд╕рд╛рде(NOEXPAND).

рдЪреВрдВрдХрд┐ LINQ рдкреНрд░рд╢реНрди рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ - рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдХрд╛ рдПрдХ "рд░реИрдкрд░":

CREATE VIEW ╨Ш╨Ь╨п_╨┐╤А╨╡╨┤╤Б╤В╨░╨▓╨╗╨╡╨╜╨╕╤П AS SELECT * FROM MAT_VIEW WITH (NOEXPAND);

4) рдЯреЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЕрдХреНрд╕рд░ рдореЗрдВ LINQ рдкреНрд░рд╢реНрди рд╕рдмрдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЗ рдмрдбрд╝реЗ рдмреНрд▓реЙрдХ рдпрд╛ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рд╡рд╛рд▓реЗ рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдПрдХ рдмрд╣реБрдд рд╣реА рдЬрдЯрд┐рд▓ рдФрд░ рдЙрдк-рдЗрд╖реНрдЯрддрдо рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдВрддрд┐рдо рдХреНрд╡реЗрд░реА рдмрдирд╛рддреЗ рд╣реИрдВред

рдЯреЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдореБрдЦреНрдп рд▓рд╛рдн LINQ рдкреНрд░рд╢реНрди:

  1. рджреГрд╢реНрдп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
    рдлрд╝рдВрдХреНрд╢рди рд╕реЗ (@param1, @param2 ...)
    рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд▓рдЪреАрд▓рд╛ рдбреЗрдЯрд╛ рдирдореВрдирд╛рдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  2. рддрд╛рд▓рд┐рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрдХреНрд░рдорд┐рдд рджреГрд╢реНрдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕реЗ рдХреЛрдИ рдордЬрдмреВрдд рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИрдВ:
    1. рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрдХреЗрдд:
      рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ LINQ рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХрд┐ рдХреМрди рд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреНрд╡реЗрд░реА рдХрд░рддреЗ рд╕рдордп рдбреЗрдЯрд╛ рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
      рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдпреЗ рдХреНрд╖рдорддрд╛рдПрдВ рд╣реИрдВред
      рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде, рдЖрдк рдПрдХ рдХрд╛рдлреА рд╕реНрдерд┐рд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдбреЗрдЯрд╛ рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ
    2. рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдХреНрд░рдорд┐рдд рджреГрд╢реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
      • рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рдирдореВрдирд╛рдХрд░рдг рддрд░реНрдХ (рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА)
      • рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
      • рдХреЗ рдЙрдкрдпреЛрдЧ рд╕рдВрдШ ╨╕ рдореМрдЬреВрдж рд╣реИ

  3. рдкреНрд░рд╕реНрддрд╛рд╡ рд╡рд┐рдХрд▓реНрдк рдЬрдм рд╣рдореЗрдВ рд╕рдорд╡рд░реНрддреА рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рд╡рд┐рдХрд▓реНрдк(рдореИрдХреНрд╕рдбреЙрдк рдПрди), рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛ рдХрд╛ рдХреНрд░рдоред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
    • рдЖрдк рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдХрд╛ рдЬрдмрд░рди рдкреБрдирдГ рдирд┐рд░реНрдорд╛рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд┐рдХрд▓реНрдк (рдкреБрдирдГрд╕рдВрдХрд▓рди)
    • рдЖрдк рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдХреЛ рдХреНрд╡реЗрд░реА рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЬреЙрдЗрди рдСрд░реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд┐рдпрд╛ рдЬрд╛рдП рдпрд╛ рдирд╣реАрдВ рд╡рд┐рдХрд▓реНрдк (рдмрд▓ рдЖрджреЗрд╢)

    рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╡рд┐рдХрд▓реНрдк рд╡рд░реНрдгрд┐рдд рдпрд╣рд╛рдВ.

  4. рд╕рдмрд╕реЗ рд╕рдВрдХреАрд░реНрдг рдФрд░ рд╕рдмрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд╕реНрд▓рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
    рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреБрдХреНрд░рдорд┐рдд рджреГрд╢реНрдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ), рдЬрд╣рд╛рдВ рд╕реЗ рдЖрдкрдХреЛ рдЕрднреА рднреА рдбреЗрдЯрд╛ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
    рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╣рд╛рдВ рддреАрди рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдП, рдмреА, рд╕реА).

    рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдПрдХ рд╕реНрдерд┐рд░ рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ рдП = 0 рдФрд░ рдмреА = 0.

    рд╣рд╛рд▓рд╛рдБрдХрд┐, рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз c рдЕрдзрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓.

    рдЪрд▓реЛ рд╢рд░реНрдд рдП = 0 рдФрд░ рдмреА = 0 рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рдгрд╛рдореА рд╕реЗрдЯ рдХреЛ рд╣рдЬрд╛рд░реЛрдВ рд░рд┐рдХреЙрд░реНрдб рддрдХ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд░реНрдд рдЪрд╛рд▓реВ рд╣реИ ╤Б рдЪрдпрди рдХреЛ рд╕реМ рд░рд┐рдХреЙрд░реНрдб рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред

    рдпрд╣рд╛рдВ рдЯреЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

    рд╕рд╛рде рд╣реА, рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдореЗрдВ рдЕрдзрд┐рдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдирд┐рдд рдФрд░ рд╕реБрд╕рдВрдЧрдд рд╣реЛрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг

рдЖрдЗрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░ рдкреНрд░рд╢реНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦреЗрдВред

рдПрдХ рдирд┐рд╡реЗрджрди рд╣реИ рдЪреБрдирддреЗ рд╣реИрдВ, рдЬреЛ рдХрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдПрдХ рджреГрд╢реНрдп (рдСрдкрд░реЗрдЯрд┐рд╡рдХреНрд╡реЗрд╢реНрдЪрди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдмрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдИрдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ (рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдореМрдЬреВрдж рд╣реИ) рд╕реЗ "рд╕рдХреНрд░рд┐рдп рдХреНрд╡реЗрд░реАрдЬрд╝" ([рдСрдкрд░реЗрдЯрд┐рд╡ рдкреНрд░рд╢реНрди]):

рдЕрдиреБрд░реЛрдз рдХреНрд░рдорд╛рдВрдХ 1

(@p__linq__0 nvarchar(4000))SELECT
1 AS [C1],
[Extent1].[Id] AS [Id],
[Join2].[Object_Id] AS [Object_Id],
[Join2].[ObjectType_Id] AS [ObjectType_Id],
[Join2].[Name] AS [Name],
[Join2].[ExternalId] AS [ExternalId]
FROM [dbo].[Questions] AS [Extent1]
INNER JOIN (SELECT [Extent2].[Object_Id] AS [Object_Id],
[Extent2].[Question_Id] AS [Question_Id], [Extent3].[ExternalId] AS [ExternalId],
[Extent3].[ObjectType_Id] AS [ObjectType_Id], [Extent4].[Name] AS [Name]
FROM [dbo].[ObjectQuestions] AS [Extent2]
INNER JOIN [dbo].[Objects] AS [Extent3] ON [Extent2].[Object_Id] = [Extent3].[Id]
LEFT OUTER JOIN [dbo].[ObjectTypes] AS [Extent4] 
ON [Extent3].[ObjectType_Id] = [Extent4].[Id] ) AS [Join2] 
ON [Extent1].[Id] = [Join2].[Question_Id]
WHERE ([Extent1].[AnswerId] IS NULL) AND (0 = [Extent1].[Exp]) AND ( EXISTS (SELECT
1 AS [C1]
FROM [dbo].[OperativeQuestions] AS [Extent5]
WHERE (([Extent5].[Email] = @p__linq__0) OR (([Extent5].[Email] IS NULL) 
AND (@p__linq__0 IS NULL))) AND ([Extent5].[Id] = [Extent1].[Id])
));

рджреГрд╢реНрдп рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИ: рдЗрд╕рдореЗрдВ рд╕рдмрдХреНрд╡реЗрд░реА рдЬреБрдбрд╝рддреА рд╣реИ рдФрд░ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ DISTINCT, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдХрд╛рдлреА рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдСрдкрд░реЗрд╢рди рд╣реИред

рдСрдкрд░реЗрдЯрд┐рд╡рдХреНрд╡реЗрд╢реНрдЪрди рдХрд╛ рдПрдХ рдирдореВрдирд╛ рд▓рдЧрднрдЧ рджрд╕ рд╣рдЬрд╛рд░ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рд╣реИред

рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рдХреНрд╡реЗрд░реА рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╕рдмрдХреНрд╡реЗрд░реА рдХреЛ [рдСрдкрд░реЗрдЯрд┐рд╡рдХреНрд╡реЗрд╢реНрдЪрди] рджреГрд╢реНрдп рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ [рдИрдореЗрд▓] = @p__linq__0 рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдЪрдпрди рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдореМрдЬреВрдж рд╣реИ) рд╕реИрдХрдбрд╝реЛрдВ рд░рд┐рдХреЙрд░реНрдб рддрдХред

рдФрд░ рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрдХреНрд╡реЗрд░реА рдХреЛ рдПрдХ рдмрд╛рд░ [рдИрдореЗрд▓] = @p__linq__0 рджреНрд╡рд╛рд░рд╛ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рдЗрди рд╕реМ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреНрд╡реЗрд░реА рддреЗрдЬрд╝ рд╣реЛрдЧреАред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рднреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдХрдиреЗрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ: рдСрдкрд░реЗрдЯрд┐рд╡ рдкреНрд░рд╢реНрдиреЛрдВ рд╕реЗ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдЖрдИрдбреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛, рдФрд░ рдИрдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдиреБрд░реЛрдз рд╕рднреА рд╣рдЬрд╛рд░реЛрдВ рдСрдкрд░реЗрдЯрд┐рд╡рдХреНрд╡реЗрд╢реНрдЪрди рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдИрдореЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЗрд╡рд▓ рд░реБрдЪрд┐ рдХреЗ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдСрдкрд░реЗрдЯрд┐рд╡ рдкреНрд░рд╢реНрди рдкрд╛рда рджреЗрдЦреЗрдВ:

рдЕрдиреБрд░реЛрдз рдХреНрд░рдорд╛рдВрдХ 2

 
CREATE VIEW [dbo].[OperativeQuestions]
AS
SELECT DISTINCT Q.Id, USR.email AS Email
FROM            [dbo].Questions AS Q INNER JOIN
                         [dbo].ProcessUserAccesses AS BPU ON BPU.ProcessId = CQ.Process_Id 
OUTER APPLY
                     (SELECT   1 AS HasNoObjects
                      WHERE   NOT EXISTS
                                    (SELECT   1
                                     FROM     [dbo].ObjectUserAccesses AS BOU
                                     WHERE   BOU.ProcessUserAccessId = BPU.[Id] AND BOU.[To] IS NULL)
) AS BO INNER JOIN
                         [dbo].Users AS USR ON USR.Id = BPU.UserId
WHERE        CQ.[Exp] = 0 AND CQ.AnswerId IS NULL AND BPU.[To] IS NULL 
AND (BO.HasNoObjects = 1 OR
              EXISTS (SELECT   1
                           FROM   [dbo].ObjectUserAccesses AS BOU INNER JOIN
                                      [dbo].ObjectQuestions AS QBO 
                                                  ON QBO.[Object_Id] =BOU.ObjectId
                               WHERE  BOU.ProcessUserAccessId = BPU.Id 
                               AND BOU.[To] IS NULL AND QBO.Question_Id = CQ.Id));

DbContext рдореЗрдВ рдЖрд░рдВрднрд┐рдХ рджреГрд╢реНрдп рдореИрдкрд┐рдВрдЧ (EF Core 2)

public class QuestionsDbContext : DbContext
{
    //...
    public DbQuery<OperativeQuestion> OperativeQuestions { get; set; }
    //...
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Query<OperativeQuestion>().ToView("OperativeQuestions");
    }
}

рдкреНрд░рд╛рд░рдВрднрд┐рдХ LINQ рдХреНрд╡реЗрд░реА

var businessObjectsData = await context
    .OperativeQuestions
    .Where(x => x.Email == Email)
    .Include(x => x.Question)
    .Select(x => x.Question)
    .SelectMany(x => x.ObjectQuestions,
                (x, bo) => new
                {
                    Id = x.Id,
                    ObjectId = bo.Object.Id,
                    ObjectTypeId = bo.Object.ObjectType.Id,
                    ObjectTypeName = bo.Object.ObjectType.Name,
                    ObjectExternalId = bo.Object.ExternalId
                })
    .ToListAsync();

рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдмрд┐рдирд╛, рддреИрдпрд╛рд░ рдкрд░рд┐рдгрд╛рдореЛрдВ ("рд╕рдХреНрд░рд┐рдп рдХреНрд╡реЗрд░реАрдЬрд╝") рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛ рдкреЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдбреЗрдЯрд╛ рд╕реЗ рднрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрджреНрдпрддрд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред .

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдСрдкрд░реЗрдЯрд┐рд╡рдХреНрд╡реЗрд╢реНрдЪрди рджреГрд╢реНрдп рд╕реЗ [рдИрдореЗрд▓] = @p__linq__0 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рдирд╛ рд╣реИред

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдлрд╝рдВрдХреНрд╢рди [dbo].[OperativeQuestionsUserMail] рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВред

рдИрдореЗрд▓ рдХреЛ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрдХрд░, рд╣рдореЗрдВ рдорд╛рдиреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╡рд╛рдкрд╕ рдорд┐рд▓рддреА рд╣реИ:

рдЕрдиреБрд░реЛрдз рдХреНрд░рдорд╛рдВрдХ 3


CREATE FUNCTION [dbo].[OperativeQuestionsUserMail]
(
    @Email  nvarchar(4000)
)
RETURNS
@tbl TABLE
(
    [Id]           uniqueidentifier,
    [Email]      nvarchar(4000)
)
AS
BEGIN
        INSERT INTO @tbl ([Id], [Email])
        SELECT Id, @Email
        FROM [OperativeQuestions]  AS [x] WHERE [x].[Email] = @Email;
     
    RETURN;
END

рдпрд╣ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдорд╛рдиреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдСрдкрд░реЗрдЯрд┐рд╡рдХреНрд╡реЗрд╕реНрдЯрд┐рдпрдВрд╕рдпреВрдЬрд░рдореЗрд▓ рдХреА рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЛ рдЗрд╖реНрдЯрддрдо рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╖реНрдЯрддрдо рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдЦреНрдд рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рди рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд░рд┐рдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ...

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХ рдХреНрд╡реЗрд░реА 1 рдХреЛ рдХреНрд╡реЗрд░реА 4 рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдЕрдиреБрд░реЛрдз рдХреНрд░рдорд╛рдВрдХ 4

(@p__linq__0 nvarchar(4000))SELECT
1 AS [C1],
[Extent1].[Id] AS [Id],
[Join2].[Object_Id] AS [Object_Id],
[Join2].[ObjectType_Id] AS [ObjectType_Id],
[Join2].[Name] AS [Name],
[Join2].[ExternalId] AS [ExternalId]
FROM (
    SELECT Id, Email FROM [dbo].[OperativeQuestionsUserMail] (@p__linq__0)
) AS [Extent0]
INNER JOIN [dbo].[Questions] AS [Extent1] ON([Extent0].Id=[Extent1].Id)
INNER JOIN (SELECT [Extent2].[Object_Id] AS [Object_Id], [Extent2].[Question_Id] AS [Question_Id], [Extent3].[ExternalId] AS [ExternalId], [Extent3].[ObjectType_Id] AS [ObjectType_Id], [Extent4].[Name] AS [Name]
FROM [dbo].[ObjectQuestions] AS [Extent2]
INNER JOIN [dbo].[Objects] AS [Extent3] ON [Extent2].[Object_Id] = [Extent3].[Id]
LEFT OUTER JOIN [dbo].[ObjectTypes] AS [Extent4] 
ON [Extent3].[ObjectType_Id] = [Extent4].[Id] ) AS [Join2] 
ON [Extent1].[Id] = [Join2].[Question_Id]
WHERE ([Extent1].[AnswerId] IS NULL) AND (0 = [Extent1].[Exp]);

DbContext рдореЗрдВ рджреГрд╢реНрдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░рдг (EF Core 2)

public class QuestionsDbContext : DbContext
{
    //...
    public DbQuery<OperativeQuestion> OperativeQuestions { get; set; }
    //...
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Query<OperativeQuestion>().ToView("OperativeQuestions");
    }
}
 
public static class FromSqlQueries
{
    public static IQueryable<OperativeQuestion> GetByUserEmail(this DbQuery<OperativeQuestion> source, string Email)
        => source.FromSql($"SELECT Id, Email FROM [dbo].[OperativeQuestionsUserMail] ({Email})");
}

рдЕрдВрддрд┐рдо LINQ рдХреНрд╡реЗрд░реА

var businessObjectsData = await context
    .OperativeQuestions
    .GetByUserEmail(Email)
    .Include(x => x.Question)
    .Select(x => x.Question)
    .SelectMany(x => x.ObjectQuestions,
                (x, bo) => new
                {
                    Id = x.Id,
                    ObjectId = bo.Object.Id,
                    ObjectTypeId = bo.Object.ObjectType.Id,
                    ObjectTypeName = bo.Object.ObjectType.Name,
                    ObjectExternalId = bo.Object.ExternalId
                })
    .ToListAsync();

рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХрд╛ рдХреНрд░рдо 200-800 рдПрдордПрд╕ рд╕реЗ рдШрдЯрдХрд░ 2-20 рдПрдордПрд╕ рдЖрджрд┐ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдпрд╛рдиреА рджрд╕рд┐рдпреЛрдВ рдЧреБрдирд╛ рддреЗрдЬред

рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдФрд░ рдФрд╕рдд рд░реВрдк рд╕реЗ рд▓реЗрдВ рддреЛ рд╣рдореЗрдВ 350 рдПрдордПрд╕ рдХреА рдЬрдЧрд╣ 8 рдПрдордПрд╕ рдорд┐рд▓реЗред

рд╕реНрдкрд╖реНрдЯ рд▓рд╛рднреЛрдВ рд╕реЗ рд╣рдореЗрдВ рдпрд╣ рднреА рдорд┐рд▓рддрд╛ рд╣реИ:

  1. рдкрдврд╝рдиреЗ рдХреЗ рднрд╛рд░ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХрдореА,
  2. рдЕрд╡рд░реБрджреНрдз рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдХрдореА
  3. рдФрд╕рдд рдЕрд╡рд░реЛрдзрди рд╕рдордп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдореВрд▓реНрдпреЛрдВ рддрдХ рдХрдо рдХрд░рдирд╛

рдЙрддреНрдкрд╛рджрди

рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЙрд▓ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдФрд░ рдлрд╛рдЗрди-рдЯреНрдпреВрдирд┐рдВрдЧ MS SQL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ LINQ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

рдЗрд╕ рдХрд╛рдо рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рдФрд░ рдирд┐рд░рдВрддрд░рддрд╛ рдмрд╣реБрдд рдЬрд░реВрд░реА рд╣реИ.

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ:

  1. рдЙрд╕ рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдорд╛рди, рдЪрдпрдирд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░)
  2. рдЗрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдЪрд┐рдд рдЕрдиреБрдХреНрд░рдордг рдХрд░реЗрдВ
  3. рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЬреБрдбрд╝рдиреЗ рдХреА рд╢рд░реНрддреЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ

рдЕрдЧрд▓реЗ рдЕрдиреБрдХреВрд▓рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ:

  1. рдЕрдиреБрд░реЛрдз рдХрд╛ рдЖрдзрд╛рд░ рдФрд░ рдореБрдЦреНрдп рдЕрдиреБрд░реЛрдз рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ
  2. рд╕рдорд╛рди рдХреНрд╡реЗрд░реА рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдФрд░ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛
  3. рдПрд╕рдПрд╕рдПрдордПрд╕ рдпрд╛ рдЕрдиреНрдп рдЬреАрдпреВрдЖрдИ рдореЗрдВ SQL рд╕рд░реНрд╡рд░ рд╕реНрд╡рдпрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА (рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛, рдЗрд╕ рднрдВрдбрд╛рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдореА рдХреНрд╡реЗрд░реА рдмрдирд╛рдирд╛ (рдХрдИ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ))
  4. рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЖрдзрд╛рд░ рдорд╛рдирдХрд░ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА, рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ LINQ рдХреНрд╡реЗрд░реА

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк LINQ рдХреНрд╡реЗрд░реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд╣рдЪрд╛рдиреЗ рдЧрдП рдЗрд╖реНрдЯрддрдо рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдмрд┐рдВрджреБ 3 рд╕реЗ.

рд╕реНрд╡реАрдХреГрддрд┐рдпрд╛рдБ

рд╕рд╛рдерд┐рдпреЛрдВ рдХреЛ рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж jobgemws ╨╕ alex_ozr рдХрдВрдкрдиреА рд╕реЗ рдлреЛрд░реНрдЯрд┐рд╕ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдПред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ