LINQ рдХреНрд╡реЗрд░реА рдХреЛ C # .NET рдореЗрдВ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ

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


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

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

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

рд╣рд╛рд▓рд╛рдБрдХрд┐, LINQ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЛ рд▓рд┐рдЦрд┐рдд рд░реВрдк рд╕реЗ SQL рдХреНрд╡реЗрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдПрдХ рдЕрдиреБрднрд╡реА DBA, SQL рдХреНрд╡реЗрд░реА рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреА рд╕рднреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ :

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

LINQ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рдкрд░рд┐рдгрд╛рдореА SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдореБрдЦреНрдп рдкреНрд░рджрд░реНрд╢рди рдХреА рдЕрдбрд╝рдЪрдиреЗрдВ :

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

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


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

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


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

рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдЪреБрдирдиреЗ рдкрд░ рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реМрдЯреЗ рд╕реЗрдЯ рдХреЛ рдХреНрд╡реЗрд░реА рддрдХ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 500,000 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЗрд╡рд▓ 2,000 рд╕рдХреНрд░рд┐рдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реИрдВред рддрдм рдПрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЪрдпрдирд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рд╣рдореЗрдВ рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛ рдкрд░ INDEX SCAN рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ рдФрд░ рд╣рдореЗрдВ рдЧреИрд░-рдХреНрд▓рд╕реНрдЯрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдЬрд▓реНрджреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

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

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

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

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдФрд░ рдХреИрд╢рд┐рдВрдЧ рдЕрдХреНрд╕рд░ рдЦрд░рд╛рдм рд▓рд┐рдЦрд┐рдд LINQ рдХреНрд╡реЗрд░реА рдФрд░ SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ ред

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

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

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

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

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

2) рдПрдХ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд╡рд┐рд▓рдп рдЧреБрдг


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

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

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

IsClosed = 0 рдФрд░ рд░рджреНрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ = 0 рдФрд░ рд╕рдХреНрд╖рдо = 0 рдХреЛ Status = 1 рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

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

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

3) рд╕рдмрдорд┐рд╢рди рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди


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

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

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

рд▓реЗрдХрд┐рди рдПрдХ рджреГрд╢реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдХрдИ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ:

  1. рдЙрдк- рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, EXISTS рдХреНрд▓реЙрд╕ рдХреЛ JOIN рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
  2. UNION , UNION ALL , EXCEPTION , INTERSECT рдХреНрд▓рд╛рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
  3. рдЖрдк рдЯреЗрдмрд▓ рд╕рдВрдХреЗрдд рдФрд░ рд╡рд┐рдХрд▓реНрдк рдЦрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
  4. рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ
  5. рд╡рд┐рднрд┐рдиреНрди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ

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

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

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

CREATE VIEW _ AS SELECT * FROM MAT_VIEW WITH (NOEXPAND);

4) рддрд╛рд▓рд┐рдХрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


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

рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдореБрдЦреНрдп рд▓рд╛рдн :

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

    1. :
      LINQ .
      .
      ,
    2. , , :

      • ( )
      • UNION EXISTS

  3. OPTION , OPTION(MAXDOP N), . :

    • OPTION (RECOMPILE)
    • , OPTION (FORCE ORDER)

    OPTION .
  4. :
    ( ), .
    , , WHERE (a, b, c).

    a = 0 and b = 0.

    , c .

    a = 0 and b = 0 , .

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

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

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


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

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

рдЕрдиреБрд░реЛрдз рдирдВрдмрд░ 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 рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ , рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рд╕рдВрдЪрд╛рд▓рди рд╣реЛрддрд╛ рд╣реИред

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

рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рдХреНрд╡реЗрд░реА рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, [рдСрдкрд░реЗрдЯрд┐рд╡рдХреНрд╡реЗрд╕реНрдЯрд┐рдпрдВрд╕] рджреГрд╢реНрдп рдкрд░ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╕рдмрдХреНрд╡реЗрд░реА рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕реИрдВрдкрд▓ ( EXISTS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ) рдХреЛ [рдИрдореЗрд▓] = @ _Llinq__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


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

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

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд╛рдВрдЫрд┐рдд рдЕрдиреБрд░реЛрдз 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. рд╕реНрд╡реАрдХрд╛рд░реНрдп рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдЕрд╡рд░реБрджреНрдз рд╕рдордп рдХреА рдХрдореА

рдирд┐рд╖реНрдХрд░реНрд╖


LINQ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ MS SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреЙрд▓ рдХрд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдлрд╛рдЗрди-рдЯреНрдпреВрдирд┐рдВрдЧ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рдо рдореЗрдВ, рджреЗрдЦрднрд╛рд▓ рдФрд░ рдирд┐рд░рдВрддрд░рддрд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ:





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

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

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

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкрд░рд┐рдгрд╛рдореА LINQ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдЧреНрд░рд╛рдл 3 рд╕реЗ рдкрд╣рдЪрд╛рдиреА рдЧрдИ рдЗрд╖реНрдЯрддрдо SQL рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдорд╛рди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ред

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


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

All Articles