C#.NET เชฎเชพเช‚ LINQ เช•เซเชตเซ‡เชฐเซ€เชเชจเซ‡ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชชเชฆเซเชงเชคเชฟเช“

เชชเชฐเชฟเชšเชฏ

ะ’ เช† เชฒเซ‡เช– เช•เซ‡เชŸเชฒเซ€เช• เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชชเชฆเซเชงเชคเชฟเช“ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€ LINQ เชชเซเชฐเชถเซเชจเซ‹.
เช…เชนเซ€เช‚ เช…เชฎเซ‡ เช•เซ‹เชก เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชธเช‚เชฌเช‚เชงเชฟเชค เช•เซ‡เชŸเชฒเชพเช• เชตเชงเซ เช…เชญเชฟเช—เชฎเซ‹ เชชเชฃ เชฐเชœเซ‚ เช•เชฐเซ€เช เช›เซ€เช LINQ เชชเซเชฐเชถเซเชจเซ‹.

เชคเซ‡ เชœเชพเชฃเซ€เชคเซเช‚ เช›เซ‡ เช•เซ‡ LINQ(เชญเชพเชทเชพ-เชธเช‚เช•เชฒเชฟเชค เช•เซเชตเซ‡เชฐเซ€) เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชคเชจเซ€ เช•เซเชตเซ‡เชฐเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชธเชฐเชณ เช…เชจเซ‡ เช…เชจเซเช•เซ‚เชณ เชญเชพเชทเชพ เช›เซ‡.

ะ LINQ เชฅเซ€ SQL DBMS เชฎเชพเช‚ เชกเซ‡เชŸเชพ เชเช•เซเชธเซ‡เชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชŸเซ‡เช•เชจเซ‹เชฒเซ‹เชœเซ€ เช›เซ‡. เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช† เชเช• เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เชธเชพเชงเชจ เช›เซ‡, เชœเซเชฏเชพเช‚ เช•เซเชตเซ‡เชฐเซ€ เชเช• เช˜เซ‹เชทเชฃเชพเชคเซเชฎเช• เชญเชพเชทเชพ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡ เชชเช›เซ€ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. SQL เชชเซเชฐเชถเซเชจเซ‹ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เช…เชจเซ‡ เช…เชฎเชฒเซ€เช•เชฐเชฃ เชฎเชพเชŸเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐ เชชเชฐ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, DBMS เชฆเซเชตเชพเชฐเชพ เช…เชฎเชพเชฐเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เชเชฎเชเชธ เชเชธเช•เซเชฏเซเชเชฒ เชธเชฐเซเชตเชฐ.

เชœเซ‹ เช•เซ‡, LINQ เชชเซเชฐเชถเซเชจเซ‹ เชถเซเชฐเซ‡เชทเซเช  เชฐเซ€เชคเซ‡ เชฒเช–เซ‡เชฒเชพเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เชฅเชคเชพ เชจเชฅเซ€ SQL เชชเซเชฐเชถเซเชจเซ‹, เชœเซ‡ เชเช• เช…เชจเซเชญเชตเซ€ DBA เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจเชจเซ€ เชคเชฎเชพเชฎ เช˜เซ‹เช‚เช˜เชพเชŸ เชธเชพเชฅเซ‡ เชฒเช–เซ€ เชถเช•เซ‡ เช›เซ‡ SQL เชชเซเชฐเชถเซเชจเซ‹:

  1. เชถเซเชฐเซ‡เชทเซเช  เชœเซ‹เชกเชพเชฃเซ‹ (เชœเซ‹เชกเชพเช“) เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‡ เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเชตเซเช‚ (เช•เซเชฏเชพเช‚ เช›เซ‡)
  2. เชœเซ‹เชกเชพเชฃเซ‹ เช…เชจเซ‡ เชœเซ‚เชฅ เชถเชฐเชคเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช˜เชฃเซ€ เช˜เซ‹เช‚เช˜เชพเชŸ
  3. เชฌเชฆเชฒเชตเชพเชจเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชฎเชพเช‚ เช˜เชฃเซ€ เชญเชฟเชจเซเชจเชคเชพ IN เชชเชฐ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡ะธ เชฎเชพเช‚ เชจเชนเชฟ, <> เชšเชพเชฒเซ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡
  4. เช…เชธเซเชฅเชพเชฏเซ€ เช•เซ‹เชทเซเชŸเช•เซ‹, CTE, เช•เซ‹เชทเซเชŸเช• เชšเชฒเซ‹ เชฆเซเชตเชพเชฐเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซเช‚ เชฎเชงเซเชฏเชตเชฐเซเชคเซ€ เช•เซ‡เชถเซ€เช‚เช—
  5. เชตเชพเช•เซเชฏเชจเซ‹ เช‰เชชเชฏเซ‹เช— (เชตเชฟเช•เชฒเซเชช) เชธเซ‚เชšเชจเซ‹ เช…เชจเซ‡ เชŸเซ‡เชฌเชฒ เชธเช‚เช•เซ‡เชคเซ‹ เชธเชพเชฅเซ‡ เชธเชพเชฅเซ‡ (...)
  6. เชชเชธเช‚เชฆเช—เซ€ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชฌเชฟเชจเชœเชฐเซ‚เชฐเซ€ เชกเซ‡เชŸเชพ เชฐเซ€เชกเชฟเช‚เช—เซเชธเชฅเซ€ เช›เซเชŸเช•เชพเชฐเซ‹ เชฎเซ‡เชณเชตเชตเชพเชจเชพ เชเช• เชฎเชพเชงเซเชฏเชฎ เชคเชฐเซ€เช•เซ‡ เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฆเซƒเชถเซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹

เชชเชฐเชฟเชฃเชพเชฎเซ€ เชฎเซเช–เซเชฏ เช•เชพเชฎเช—เซ€เชฐเซ€ เช…เชตเชฐเซ‹เชงเซ‹ SQL เชชเซเชฐเชถเซเชจเซ‹ เชธเช‚เช•เชฒเชจ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ LINQ เชชเซเชฐเชถเซเชจเซ‹ เช›เซ‡:

  1. เชเช• เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เชธเชฎเช—เซเชฐ เชกเซ‡เชŸเชพ เชธเชฟเชฒเซ‡เช•เซเชถเชจ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ
  2. เช•เซ‹เชกเชจเชพ เชธเชฎเชพเชจ เชฌเซเชฒเซ‹เช•เซเชธเชจเซ€ เชจเช•เชฒ เช•เชฐเชตเซ€, เชœเซ‡ เช†เช–เชฐเซ‡ เชฌเชนเซเชตเชฟเชง เชฌเชฟเชจเชœเชฐเซ‚เชฐเซ€ เชกเซ‡เชŸเชพ เชตเชพเช‚เชšเชตเชพ เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชœเชพเชฏ เช›เซ‡
  3. เชฌเชนเซ-เช˜เชŸเช• เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชจเชพ เชœเซ‚เชฅเซ‹ (เชคเชพเชฐเซเช•เชฟเช• โ€œเช…เชจเซ‡โ€ เช…เชจเซ‡ โ€œเช…เชฅเชตเชพโ€) - เช…เชจเซ‡ ะธ OR, เชœเชŸเชฟเชฒ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชฎเชพเช‚ เชธเช‚เชฏเซ‹เชœเชจ, เช เชนเช•เซ€เช•เชค เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชœเชพเชฏ เช›เซ‡ เช•เซ‡ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเชฐ, เชœเชฐเซ‚เชฐเซ€ เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชฎเชพเชŸเซ‡ เชฏเซ‹เช—เซเชฏ เชฌเชฟเชจ-เช•เซเชฒเชธเซเชŸเชฐเซเชก เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเช“ เชงเชฐเชพเชตเชคเซเช‚, เช†เช–เชฐเซ‡ เช•เซเชฒเชธเซเชŸเชฐเซเชก เช‡เชจเซเชกเซ‡เช•เซเชธเชจเซ€ เชตเชฟเชฐเซเชฆเซเชง เชธเซเช•เซ‡เชจ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡ (เช‡เชจเซเชกเซ‡เช•เซเชธ เชธเซเช•เซ‡เชจ) เชถเชฐเชคเซ‹เชจเชพ เชœเซ‚เชฅเซ‹ เชฆเซเชตเชพเชฐเชพ
  4. เชธเชฌเช•เซเชตเซ‡เชฐเซ€เชเชจเซเช‚ เชŠเช‚เชกเชพ เชฎเชพเชณเช–เซเช‚ เชชเชพเชฐเซเชธเชฟเช‚เช—เชจเซ‡ เช–เซ‚เชฌ เชœ เชธเชฎเชธเซเชฏเชพเชฐเซ‚เชช เชฌเชจเชพเชตเซ‡ เช›เซ‡ เชเชธเช•เซเชฏเซเชเชฒ เชจเชฟเชตเซ‡เชฆเชจเซ‹ เช…เชจเซ‡ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชคเชฐเชซเชฅเซ€ เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช…เชจเซ‡ DBA

เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชชเชฆเซเชงเชคเชฟเช“

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชธเซ€เชงเชพ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชชเชฆเซเชงเชคเชฟเช“ เชชเชฐ เชœเชˆเช.

1) เชตเชงเชพเชฐเชพเชจเซ€ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ

เชฎเซเช–เซเชฏ เชชเชธเช‚เชฆเช—เซ€ เช•เซ‹เชทเซเชŸเช•เซ‹ เชชเชฐ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเชพเชจเซเช‚ เชถเซเชฐเซ‡เชทเซเช  เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เช˜เชฃเซ€ เชตเชพเชฐ เชธเชฎเช—เซเชฐ เช•เซเชตเซ‡เชฐเซ€ เชเช• เช…เชฅเชตเชพ เชฌเซ‡ เชฎเซเช–เซเชฏ เช•เซ‹เชทเซเชŸเช•เซ‹ (เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ-เชฒเซ‹เช•เซ‹-เช‘เชชเชฐเซ‡เชถเชจเซเชธ) เช…เชจเซ‡ เชถเชฐเชคเซ‹เชจเชพ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชธเชฎเซ‚เชน (IsClosed, Canceled, Enabled, Status) เชจเซ€ เช†เชธเชชเชพเชธ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช“เชณเช–เชพเชฏเซ‡เชฒ เชจเชฎเซ‚เชจเชพเช“ เชฎเชพเชŸเซ‡ เชฏเซ‹เช—เซเชฏ เชธเซ‚เชšเช•เชพเช‚เช•เซ‹ เชฌเชจเชพเชตเชตเซเช‚ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡.

เช† เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชชเชธเช‚เชฆ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช† เชธเซ‹เชฒเซเชฏเซเชถเชจ เช…เชฐเซเชฅเชชเซ‚เชฐเซเชฃ เชฌเชจเซ‡ เช›เซ‡ เชœเซ‡ เช•เซเชตเซ‡เชฐเซ€ เชชเชฐ เชชเชพเช›เชพ เชซเชฐเซ‡เชฒเชพ เชธเซ‡เชŸเชจเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช•เชฐเซ‡ เช›เซ‡.

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ 500000 เช…เชฐเชœเซ€เช“ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชคเซเชฏเชพเช‚ เชฎเชพเชคเซเชฐ 2000 เชธเช•เซเชฐเชฟเชฏ เช…เชฐเชœเซ€เช“ เช›เซ‡. เชชเช›เซ€ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒ เช‡เชจเซเชกเซ‡เช•เซเชธ เช†เชชเชฃเชจเซ‡ เชคเซ‡เชจเชพเชฅเซ€ เชฌเชšเชพเชตเชถเซ‡ เช‡เชจเซเชกเซ‡เช•เซเชธ เชธเซเช•เซ‡เชจ เชฎเซ‹เชŸเชพ เชŸเซ‡เชฌเชฒ เชชเชฐ เช…เชจเซ‡ เชคเชฎเชจเซ‡ เชฌเชฟเชจ-เช•เซเชฒเชธเซเชŸเชฐเซเชก เช‡เชจเซเชกเซ‡เช•เซเชธ เชฆเซเชตเชพเชฐเชพ เชเชกเชชเชฅเซ€ เชกเซ‡เชŸเชพ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเชถเซ‡.

เช‰เชชเชฐเชพเช‚เชค, เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจ เชชเชพเชฐเซเชธ เช•เชฐเชตเชพ เช…เชฅเชตเชพ เชธเชฟเชธเซเชŸเชฎ เชตเซเชฏเซ‚เชจเชพ เช†เช‚เช•เชกเชพ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชธเช‚เช•เซ‡เชคเซ‹ เชฆเซเชตเชพเชฐเชพ เชˆเชจเซเชกเซ‡เช•เซเชธเชจเซ‹ เช…เชญเชพเชต เช“เชณเช–เซ€ เชถเช•เชพเชฏ เช›เซ‡. เชเชฎเชเชธ เชเชธเช•เซเชฏเซเชเชฒ เชธเชฐเซเชตเชฐ:

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

เช…เชตเช•เชพเชถเซ€ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเช“เชจเชพ เช…เชชเชตเชพเชฆ เชธเชฟเชตเชพเชฏ, เชคเชฎเชพเชฎ เชตเซเชฏเซ เชกเซ‡เชŸเชพเชฎเชพเช‚ เช–เซ‚เชŸเชคเชพ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเช“ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชถเชพเชฎเซ‡เชฒ เช›เซ‡.

เชœเซ‹ เช•เซ‡, เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเช“ เช…เชจเซ‡ เช•เซ‡เชถเซ€เช‚เช— เช เช˜เชฃเซ€เชตเชพเชฐ เช–เชฐเชพเชฌ เชฐเซ€เชคเซ‡ เชฒเช–เซ‡เชฒเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเชพเชจเซ€ เชชเชฆเซเชงเชคเชฟเช“ เช›เซ‡ LINQ เชชเซเชฐเชถเซเชจเซ‹ ะธ SQL เชชเซเชฐเชถเซเชจเซ‹.

เชœเซ€เชตเชจเชจเซ€ เช•เช เซ‹เชฐ เชชเซเชฐเซ‡เช•เซเชŸเชฟเชธ เชฌเชคเชพเชตเซ‡ เช›เซ‡ เชคเซ‡เชฎ, เชตเซเชฏเชตเชธเชพเชฏ เชฎเชพเชŸเซ‡ เชšเซ‹เช•เซเช•เชธ เชธเชฎเชฏเชฎเชฐเซเชฏเชพเชฆเชพ เชฆเซเชตเชพเชฐเชพ เชตเซเชฏเชตเชธเชพเชฏเชฟเช• เชตเชฟเชถเซ‡เชทเชคเชพเช“เชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเซ€ เช˜เชฃเซ€ เชตเช–เชค เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡. เช…เชจเซ‡ เชคเซ‡เชฅเซ€, เชญเชพเชฐเซ‡ เชตเชฟเชจเช‚เชคเซ€เช“ เช˜เชฃเซ€เชตเชพเชฐ เช•เซ‡เชถเซ€เช‚เช— เชธเชพเชฅเซ‡ เชชเซƒเชทเซเช เชญเซ‚เชฎเชฟเชฎเชพเช‚ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เชฅเชพเชฏ เช›เซ‡.

เช† เช†เช‚เชถเชฟเช• เชฐเซ€เชคเซ‡ เชจเซเชฏเชพเชฏเซ€ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เชจเชตเซ€เชจเชคเชฎ เชกเซ‡เชŸเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชคเซ€ เชจเชฅเซ€ เช…เชจเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช‡เชจเซเชŸเชฐเชซเซ‡เชธเชจเซ€ เชชเซเชฐเชคเชฟเชญเชพเชตเชถเซ€เชฒเชคเชพเชจเซเช‚ เชธเซเชตเซ€เช•เชพเชฐเซเชฏ เชธเซเชคเชฐ เช›เซ‡.

เช† เช…เชญเชฟเช—เชฎ เชตเซเชฏเชตเชธเชพเชฏเชฟเช• เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹เชจเซ‡ เชนเชฒ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช†เช–เชฐเซ‡ เชธเชฎเชธเซเชฏเชพเช“เชจเชพ เช‰เช•เซ‡เชฒเซ‹เชฎเชพเช‚ เชตเชฟเชฒเช‚เชฌ เช•เชฐเซ€เชจเซ‡ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชฃเชพเชฒเซ€เชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ‡ เช˜เชŸเชพเชกเซ‡ เช›เซ‡.

เชคเซ‡ เชฏเชพเชฆ เชฐเชพเช–เชตเซเช‚ เชชเชฃ เชฏเซ‹เช—เซเชฏ เช›เซ‡ เช•เซ‡ เช‰เชฎเซ‡เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชธเซ‚เชšเช•เชพเช‚เช•เซ‹ เชถเซ‹เชงเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚, เชธเซ‚เชšเชจเซ‹ เชเชฎเชเชธ เชเชธเช•เซเชฏเซเชเชฒ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เช–เซ‹เชŸเซเช‚ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเซ€ เชถเชฐเชคเซ‹เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡:

  1. เชœเซ‹ เชคเซเชฏเชพเช‚ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เช•เซเชทเซ‡เชคเซเชฐเซ‹เชจเชพ เชธเชฎเชพเชจ เชธเชฎเซ‚เชน เชธเชพเชฅเซ‡ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเช“ เช›เซ‡
  2. เชœเซ‹ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚เชจเชพ เช•เซเชทเซ‡เชคเซเชฐเซ‹เชจเซ‡ เช‡เชจเซเชกเซ‡เช•เซเชธเซ€เช‚เช— เชชเซเชฐเชคเชฟเชฌเช‚เชงเซ‹เชจเซ‡ เช•เชพเชฐเชฃเซ‡ เช…เชจเซเช•เซเชฐเชฎเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชคเชพ เชจเชฅเซ€ (เชตเชงเซ เชตเชฟเช—เชคเชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡ เช…เชนเซ€เช‚).

2) เชตเชฟเชถเซ‡เชทเชคเชพเช“เชจเซ‡ เชเช• เชจเชตเซ€ เชตเชฟเชถเซ‡เชทเชคเชพเชฎเชพเช‚ เชฎเชฐเซเชœ เช•เชฐเชตเซ€

เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชเช• เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚เชฅเซ€ เช•เซ‡เชŸเชฒเชพเช• เช•เซเชทเซ‡เชคเซเชฐเซ‹, เชœเซ‡ เชถเชฐเชคเซ‹เชจเชพ เชœเซ‚เชฅ เชฎเชพเชŸเซ‡ เช†เชงเชพเชฐ เชคเชฐเซ€เช•เซ‡ เชธเซ‡เชตเชพ เช†เชชเซ‡ เช›เซ‡, เชคเซ‡เชจเซ‡ เชเช• เชจเชตเซเช‚ เช•เซเชทเซ‡เชคเซเชฐ เชฐเชœเซ‚ เช•เชฐเซ€เชจเซ‡ เชฌเชฆเชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เช† เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชธเซเชŸเซ‡เชŸเชธ เชซเซ€เชฒเซเชกเซเชธ เชฎเชพเชŸเซ‡ เชธเชพเชšเซเช‚ เช›เซ‡, เชœเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชฌเซ€เชŸ เช…เชฅเชตเชพ เชชเซ‚เชฐเซเชฃเชพเช‚เช• เชชเซเชฐเช•เชพเชฐเชฎเชพเช‚ เชนเซ‹เชฏ เช›เซ‡.

เช‰เชฆเชพเชนเชฐเชฃ:

IsClosed = 0 เช…เชจเซ‡ เชฐเชฆ เช•เชฐเซ‡เชฒ = 0 เช…เชจเซ‡ เชธเช•เซเชทเชฎ = 0 เชฆเซเชตเชพเชฐเชพ เชฌเชฆเชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชธเซเชฅเชฟเชคเชฟ = 1.

เช† เชคเซ‡ เชธเซเชฅเชพเชจ เช›เซ‡ เชœเซเชฏเชพเช‚ เช† เชธเซเชฅเชฟเชคเชฟเช“ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชญเชฐเซ‡เชฒเซ€ เช›เซ‡ เชคเซ‡เชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเซเชฃเชพเช‚เช• เชธเซเชฅเชฟเชคเชฟ เชตเชฟเชถเซ‡เชทเชคเชพ เชฐเชœเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช†เช—เชณ, เช† เชจเชตเซ€ เชตเชฟเชถเซ‡เชทเชคเชพ เช…เชจเซเช•เซเชฐเชฎเชฟเชค เช›เซ‡.

เช† เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ€ เชธเชฎเชธเซเชฏเชพเชจเซ‹ เชฎเซ‚เชณเชญเซ‚เชค เช‰เช•เซ‡เชฒ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เช…เชฎเซ‡ เชฌเชฟเชจเชœเชฐเซ‚เชฐเซ€ เช—เชฃเชคเชฐเซ€เช“ เชตเชฟเชจเชพ เชกเซ‡เชŸเชพเชจเซ‡ เชเช•เซเชธเซ‡เชธ เช•เชฐเซ€เช เช›เซ€เช.

3) เชฆเซƒเชถเซเชฏเชจเซเช‚ เชญเซŒเชคเชฟเช•เช•เชฐเชฃ

เช•เชฎเชจเชธเซ€เชฌเซ‡, เชฎเชพเช‚ LINQ เชชเซเชฐเชถเซเชจเซ‹ เชŸเซ‡เชฎเซเชชเชฐเชฐเซ€ เช•เซ‹เชทเซเชŸเช•เซ‹, CTE เช…เชจเซ‡ เชŸเซ‡เชฌเชฒ เชตเซ‡เชฐเซ€เชเชฌเชฒเซเชธเชจเซ‹ เชธเซ€เชงเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชพเชคเซ‹ เชจเชฅเซ€.

เชœเซ‹ เช•เซ‡, เช† เช•เซ‡เชธ เชฎเชพเชŸเซ‡ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเชพเชจเซ€ เชฌเซ€เชœเซ€ เชฐเซ€เชค เช›เซ‡ - เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฆเซƒเชถเซเชฏเซ‹.

เชถเชฐเชค เชœเซ‚เชฅ (เช‰เชชเชฐเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚เชฅเซ€) IsClosed = 0 เช…เชจเซ‡ เชฐเชฆ เช•เชฐเซ‡เชฒ = 0 เช…เชจเซ‡ เชธเช•เซเชทเชฎ = 0 (เช…เชฅเชตเชพ เช…เชจเซเชฏ เชธเชฎเชพเชจ เชถเชฐเชคเซ‹เชจเซ‹ เชธเชฎเซ‚เชน) เชฎเซ‹เชŸเชพ เชธเชฎเซ‚เชนเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพเชจเชพ เชจเชพเชจเชพ เชŸเซเช•เชกเชพเชจเซ‡ เช•เซ‡เชถ เช•เชฐเซ€เชจเซ‡, เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฆเซƒเชถเซเชฏเชฎเชพเช‚ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เชธเชพเชฐเซ‹ เชตเชฟเช•เชฒเซเชช เชฌเชจเซ€ เชœเชพเชฏ เช›เซ‡.

เชชเชฐเช‚เชคเซ เชฆเซƒเชถเซเชฏเชจเซ‡ เชธเชพเช•เชพเชฐ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชธเช‚เช–เซเชฏเชพเชฌเช‚เชง เชชเซเชฐเชคเชฟเชฌเช‚เชงเซ‹ เช›เซ‡:

  1. เชธเชฌเช•เซเชตเซ‡เชฐเซ€เช, เช•เชฒเชฎเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡ เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชฆเชฒเชตเซ€ เชœเซ‹เชˆเช เชœเซ‹เชกเชพเช“
  2. เชคเชฎเซ‡ เชตเชพเช•เซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€ UNION, เชฏเซเชจเชฟเชฏเชจ เชฌเชงเชพ, เชฌเชพเช•เชพเชค, เช‡เชจเซเชŸเชฐเชธเซ‡เช•เซเชŸ
  3. เชคเชฎเซ‡ เช•เซ‹เชทเซเชŸเช• เชธเช‚เช•เซ‡เชคเซ‹ เช…เชจเซ‡ เช•เชฒเชฎเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€ เชตเชฟเช•เชฒเซเชช
  4. เชšเช•เซเชฐ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เช•เซ‹เชˆ เชถเช•เซเชฏเชคเชพ เชจเชฅเซ€
  5. เชตเชฟเชตเชฟเชง เช•เซ‹เชทเซเชŸเช•เซ‹เชฎเชพเช‚เชฅเซ€ เชเช• เชฆเซƒเชถเซเชฏเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเซเช‚ เช…เชถเช•เซเชฏ เช›เซ‡

เชคเซ‡ เชฏเชพเชฆ เชฐเชพเช–เชตเซเช‚ เช…เช—เชคเซเชฏเชจเซเช‚ เช›เซ‡ เช•เซ‡ เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฆเซƒเชถเซเชฏเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เชตเชพเชธเซเชคเชตเชฟเช• เชฒเชพเชญ เชซเช•เซเชค เชคเซ‡เชจเซ‡ เช–เชฐเซ‡เช–เชฐ เช…เชจเซเช•เซเชฐเชฎเชฟเชค เช•เชฐเซ€เชจเซ‡ เชœ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชชเชฐเช‚เชคเซ เชœเซเชฏเชพเชฐเซ‡ เช•เซ‹เชˆ เชฆเซƒเชถเซเชฏเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡, เช† เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชˆ เชถเช•เชถเซ‡ เชจเชนเซ€เช‚, เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เชธเซเชชเชทเซเชŸ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡ เชธเชพเชฅเซ‡(NOEXPAND).

เชคเซเชฏเชพเชฐเชฅเซ€ LINQ เชชเซเชฐเชถเซเชจเซ‹ เช•เซ‹เชทเซเชŸเช• เชธเช‚เช•เซ‡เชคเซ‹เชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเซเช‚ เช…เชถเช•เซเชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเชฎเชพเชฐเซ‡ เชฌเซ€เชœเซเช‚ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเชคเซเชต เชฌเชจเชพเชตเชตเซเช‚ เชชเชกเชถเซ‡ - เชจเซ€เชšเซ‡เชจเชพ เชซเซ‹เชฐเซเชฎเชจเซเช‚ "เชฐเซ…เชชเชฐ":

CREATE VIEW ะ˜ะœะฏ_ะฟั€ะตะดัั‚ะฐะฒะปะตะฝะธั AS SELECT * FROM MAT_VIEW WITH (NOEXPAND);

4) เช•เซ‹เชทเซเชŸเช• เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹

เช˜เชฃเซ€เชตเชพเชฐ เชฎเชพเช‚ LINQ เชชเซเชฐเชถเซเชจเซ‹ เชธเชฌเช•เซเชตเซ‡เชฐเซ€เชเชจเชพ เชฎเซ‹เชŸเชพ เชฌเซเชฒเซ‹เช•เซเชธ เช…เชฅเชตเชพ เชœเชŸเชฟเชฒ เชฎเชพเชณเช–เชพ เชธเชพเชฅเซ‡เชจเชพ เชฆเซƒเชถเซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเซเชฒเซ‹เช•เซเชธ เช–เซ‚เชฌ เชœ เชœเชŸเชฟเชฒ เช…เชจเซ‡ เชธเชฌเช“เชชเซเชŸเชฟเชฎเชฒ เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เชธเซเชŸเซเชฐเช•เซเชšเชฐ เชธเชพเชฅเซ‡ เช…เช‚เชคเชฟเชฎ เช•เซเชตเซ‡เชฐเซ€ เชฌเชจเชพเชตเซ‡ เช›เซ‡.

เชฎเชพเช‚ เช•เซ‹เชทเซเชŸเช• เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเชพ เชฎเซเช–เซเชฏ เชฒเชพเชญเซ‹ LINQ เชชเซเชฐเชถเซเชจเซ‹:

  1. เช•เซเชทเชฎเชคเชพ, เชฆเซƒเชถเซเชฏเซ‹เชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชคเชฐเซ€เช•เซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพ เช…เชจเซ‡ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช•เชฐเชตเชพเชจเซ€, เชชเชฐเช‚เชคเซ เชคเชฎเซ‡ เช‡เชจเชชเซเชŸ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ‹ เชธเชฎเซ‚เชน เชชเชธเชพเชฐ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹:
    เชซเช‚เช•เซเชถเชจเชฎเชพเช‚เชฅเซ€ (@param1, @param2 ...)
    เชชเชฐเชฟเชฃเชพเชฎเซ‡, เชฒเชตเชšเซ€เช• เชกเซ‡เชŸเชพ เชธเซ‡เชฎเซเชชเชฒเชฟเช‚เช— เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡
  2. เชŸเซ‡เชฌเชฒ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช‰เชชเชฐ เชตเชฐเซเชฃเชตเซ‡เชฒ เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฆเซƒเชถเซเชฏเซ‹เชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช†เชตเชพ เช•เซ‹เชˆ เชฎเชœเชฌเซ‚เชค เชชเซเชฐเชคเชฟเชฌเช‚เชงเซ‹ เชจเชฅเซ€:
    1. เช•เซ‹เชทเซเชŸเช• เชธเช‚เช•เซ‡เชคเซ‹:
      เชฆเซเชตเชพเชฐเชพ LINQ เชคเชฎเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€ เช•เซ‡ เช•เชฏเชพ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชœเซ‹เชˆเช เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชกเซ‡เชŸเชพ เช…เชฒเช—เชคเชพ เชธเซเชคเชฐ เชจเช•เซเช•เซ€ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.
      เชชเชฐเช‚เชคเซ เช•เชพเชฐเซเชฏเชฎเชพเช‚ เช† เช•เซเชทเชฎเชคเชพเช“ เช›เซ‡.
      เชซเช‚เช•เซเชถเชจ เชธเชพเชฅเซ‡, เชคเชฎเซ‡ เชเช•เชฆเชฎ เชธเชคเชค เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจ เชนเชพเช‚เชธเชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชœเซเชฏเชพเช‚ เช‡เชจเซเชกเซ‡เช•เซเชธ เช…เชจเซ‡ เชกเซ‡เชŸเชพ เช†เช‡เชธเซ‹เชฒเซ‡เชถเชจ เชฒเซ‡เชตเชฒ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเชพ เชจเชฟเชฏเชฎเซ‹ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡.
    2. เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฆเซƒเชถเซเชฏเซ‹เชจเซ€ เชคเซเชฒเชจเชพเชฎเชพเช‚, เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡:
      • เชœเชŸเชฟเชฒ เชกเซ‡เชŸเชพ เชธเซ‡เชฎเซเชชเชฒเชฟเช‚เช— เชคเชฐเซเช• (เชฒเซ‚เชชเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเชฃ)
      • เช˜เชฃเชพเช‚ เชตเชฟเชตเชฟเชง เช•เซ‹เชทเซเชŸเช•เซ‹เชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชฎเซ‡เชณเชตเชตเซเช‚
      • เช‰เชชเชฏเซ‹เช— UNION ะธ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡

  3. เช“เชซเชฐ เชตเชฟเช•เชฒเซเชช เชœเซเชฏเชพเชฐเซ‡ เช†เชชเชฃเซ‡ เชธเชนเชตเชฐเซเชคเซ€ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เช–เซ‚เชฌ เชœ เช‰เชชเชฏเซ‹เช—เซ€ เชตเชฟเช•เชฒเซเชช(MAXDOP N), เช•เซเชตเซ‡เชฐเซ€ เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เชชเซเชฒเชพเชจเชจเซ‹ เช•เซเชฐเชฎ. เชฆเชพเช–เซเชฒเชพ เชคเชฐเซ€เช•เซ‡:
    • เชคเชฎเซ‡ เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชจเซ€ เชซเชฐเชœเชฟเชฏเชพเชค เชชเซเชจเชƒเชจเชฟเชฐเซเชฎเชพเชฃเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชตเชฟเช•เชฒเซเชช (เชซเชฐเซ€ เช•เชฎเซเชชเชพเช‡เชฒ)
    • เชคเชฎเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช•เซ‡ เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชœเซ‹เช‡เชจ เช“เชฐเซเชกเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฆเชฌเชพเชฃ เช•เชฐเชตเซเช‚ เช•เซ‡ เช•เซ‡เชฎ เชตเชฟเช•เชฒเซเชช (เชซเซ‹เชฐเซเชธ เช“เชฐเซเชกเชฐ)

    เชตเชฟเชถเซ‡ เชตเชงเซ เชตเชฟเช—เชคเซ‹ เชตเชฟเช•เชฒเซเชช เชตเชฐเซเชฃเชตเซ‡เชฒ เช…เชนเซ€เช‚.

  4. เชธเซŒเชฅเซ€ เชธเชพเช‚เช•เชกเซ€ เช…เชจเซ‡ เชธเซŒเชฅเซ€ เชœเชฐเซ‚เชฐเซ€ เชกเซ‡เชŸเชพ เชธเซเชฒเชพเช‡เชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡:
    เช•เซ‡เชถเชฎเชพเช‚ เชฎเซ‹เชŸเชพ เชกเซ‡เชŸเชพ เชธเซ‡เชŸเซเชธ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพเชจเซ€ เช•เซ‹เชˆ เชœเชฐเซ‚เชฐ เชจเชฅเซ€ (เชœเซ‡เชฎ เช•เซ‡ เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฆเซƒเชถเซเชฏเซ‹เชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช›เซ‡), เชœเซ‡เชฎเชพเช‚เชฅเซ€ เชคเชฎเชพเชฐเซ‡ เชนเชœเซ€ เชชเชฃ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ เชฆเซเชตเชพเชฐเชพ เชกเซ‡เชŸเชพเชจเซ‡ เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.
    เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชเช• เชŸเซ‡เชฌเชฒ เช›เซ‡ เชœเซ‡เชจเซเช‚ เชซเชฟเชฒเซเชŸเชฐ เช•เซเชฏเชพเช‚ เช›เซ‡ เชคเซเชฐเชฃ เช•เซเชทเซ‡เชคเซเชฐเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡ (a, b, c).

    เชชเชฐเช‚เชชเชฐเชพเช—เชค เชฐเซ€เชคเซ‡, เชฌเชงเซ€ เชตเชฟเชจเช‚เชคเซ€เช“เชฎเชพเช‚ เชธเชคเชค เชธเซเชฅเชฟเชคเชฟ เชนเซ‹เชฏ เช›เซ‡ a = 0 เช…เชจเซ‡ b = 0.

    เชœเซ‹ เช•เซ‡, เช•เซเชทเซ‡เชคเซเชฐ เชฎเชพเชŸเซ‡ เชตเชฟเชจเช‚เชคเซ€ c เชตเชงเซ เชšเชฒ.

    เชถเชฐเชค เชฆเซ‹ a = 0 เช…เชจเซ‡ b = 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])
));

เชฆเซƒเชถเซเชฏ เชเช• เชœเชŸเชฟเชฒ เชฎเชพเชณเช–เซเช‚ เชงเชฐเชพเชตเซ‡ เช›เซ‡: เชคเซ‡เชฎเชพเช‚ เชธเชฌเช•เซเชตเซ‡เชฐเซ€ เชœเซ‹เชกเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชธเซ‰เชฐเซเชŸเชฟเช‚เช—เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เช…เชฒเช—, เชœเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชเช•เชฆเชฎ เชธเช‚เชธเชพเชงเชจ-เชธเช˜เชจ เช•เชพเชฎเช—เซ€เชฐเซ€ เช›เซ‡.

OperativeQuestions เชฎเชพเช‚เชฅเซ€ เชเช• เชจเชฎเซ‚เชจเชพ เชฒเช—เชญเช— เชฆเชธ เชนเชœเชพเชฐ เชฐเซ‡เช•เซ‹เชฐเซเชก เช›เซ‡.

เช† เช•เซเชตเซ‡เชฐเซ€ เชธเชพเชฅเซ‡เชจเซ€ เชฎเซเช–เซเชฏ เชธเชฎเชธเซเชฏเชพ เช เช›เซ‡ เช•เซ‡ เชฌเชพเชนเซเชฏ เช•เซเชตเซ‡เชฐเซ€เชฎเชพเช‚เชฅเซ€ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ เชฎเชพเชŸเซ‡, เช†เช‚เชคเชฐเชฟเช• เชธเชฌเช•เซเชตเซ‡เชฐเซ€ [OperativeQuestions] เชตเซเชฏเซ เชชเชฐ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡ [Email] = @p__linq__0 เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เช†เช‰เชŸเชชเซเชŸ เชธเชฟเชฒเซ‡เช•เซเชถเชจเชจเซ‡ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเชตเซ€ เชœเซ‹เชˆเช. เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡) เชธเซ‡เช‚เช•เชกเซ‹ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ เชธเซเชงเซ€.

เช…เชจเซ‡ เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชธเชฌเช•เซเชตเซ‡เชฐเซ€เช [เชˆเชฎเซ‡เชฒ] = @p__linq__0 เชฆเซเชตเชพเชฐเชพ เชเช•เชตเชพเชฐ เชฐเซ‡เช•เซ‹เชฐเซเชกเชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเชตเซ€ เชœเซ‹เชˆเช, เช…เชจเซ‡ เชชเช›เซ€ เช† เชธเซ‹ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธเชจเชพ เชฌเซ‡ เช†เชˆเชกเซ€ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชถเซเชจเซ‹ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒเชพ เชนเซ‹เชตเชพ เชœเซ‹เชˆเช, เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€ เชเชกเชชเซ€ เชนเชถเซ‡.

เชตเชพเชธเซเชคเชตเชฎเชพเช‚, เชฌเชงเชพ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซเช‚ เช•เซเชฐเชฎเชฟเช• เชœเซ‹เชกเชพเชฃ เช›เซ‡: OperativeQuestions เชจเชพ Id เชธเชพเชฅเซ‡ Id เชชเซเชฐเชถเซเชจเซ‹เชจเชพ เชชเชคเซเชฐเชตเซเชฏเชตเชนเชพเชฐเชจเซ‡ เชคเชชเชพเชธเชตเซเช‚ เช…เชจเซ‡ เชˆเชฎเซ‡เชฒ เชฆเซเชตเชพเชฐเชพ เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเชตเซเช‚.

เชตเชพเชธเซเชคเชตเชฎเชพเช‚, เชตเชฟเชจเช‚เชคเซ€ เชคเชฎเชพเชฎ เชนเชœเชพเชฐเซ‹ OperativeQuestions เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเชพเชคเซเชฐ เชˆเชฎเซ‡เชˆเชฒ เชฆเซเชตเชพเชฐเชพ เชฐเชธเชจเชพ เชกเซ‡เชŸเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เช‘เชชเชฐเซ‡เชŸเชฟเชต เชชเซเชฐเชถเซเชจเซ‹ เชŸเซ‡เช•เซเชธเซเชŸ เชœเซเช“:

เชตเชฟเชจเช‚เชคเซ€ เชจเช‚เชฌเชฐ 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 เช•เซ‹เชฐ 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();

เช† เชšเซ‹เช•เซเช•เชธ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช…เชฎเซ‡ เชคเซˆเชฏเชพเชฐ เชชเชฐเชฟเชฃเชพเชฎเซ‹ ("เชธเช•เซเชฐเชฟเชฏ เชชเซเชฐเชถเซเชจเซ‹") เชธเชพเชฅเซ‡ เชเช• เช…เชฒเช— เช•เซ‹เชทเซเชŸเช• เชฐเชœเซ‚ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ, เชฎเชพเชณเช–เชพเช•เซ€เชฏ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชตเชฟเชจเชพ เช† เชธเชฎเชธเซเชฏเชพเชจเชพ เช‰เช•เซ‡เชฒ เชฎเชพเชŸเซ‡ เชตเชฟเชšเชพเชฐเชฃเชพ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช, เชœเซ‡เชฎเชพเช‚ เชคเซ‡เชจเซ‡ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เชญเชฐเชตเชพ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช…เชฆเซเชฏเชคเชจ เชฐเชพเช–เชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชชเชฆเซเชงเชคเชฟเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. .

เชœเซ‹ เช•เซ‡ เช† เชเช• เชธเชพเชฐเซ‹ เช‰เช•เซ‡เชฒ เช›เซ‡, เช† เชธเชฎเชธเซเชฏเชพเชจเซ‡ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเชพเชจเซ‹ เชฌเซ€เชœเซ‹ เชตเชฟเช•เชฒเซเชช เช›เซ‡.

เชฎเซเช–เซเชฏ เชนเซ‡เชคเซ OperativeQuestions เชตเซเชฏเซเชฎเชพเช‚เชฅเซ€ [Email] = @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

เช† เชชเซ‚เชฐเซเชตเชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชกเซ‡เชŸเชพ เชฎเชพเชณเช–เซเช‚ เชธเชพเชฅเซ‡ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซเช‚ เช•เซ‹เชทเซเชŸเช• เช†เชชเซ‡ เช›เซ‡.

OperativeQuestionsUserMail เชชเชฐเชจเซ€ เช•เซเชตเซ‡เชฐเซ€ เชถเซเชฐเซ‡เชทเซเช  เชฌเชจเชตเชพ เชฎเชพเชŸเซ‡ เช…เชจเซ‡ เชถเซเชฐเซ‡เชทเซเช  เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจ เชงเชฐเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชเช• เช•เชกเช• เชฎเชพเชณเช–เซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡, เช…เชจเซ‡ เชจเชนเซ€เช‚ เชฐเชฟเชŸเชฐเซเชจ เชคเชฐเซ€เช•เซ‡ เชŸเซ‡เชฌเชฒ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡...

เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชœเชฐเซ‚เชฐเซ€ เช•เซเชตเซ‡เชฐเซ€ 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 เช•เซ‹เชฐ 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 ms เชฅเซ€ เช˜เชŸเซ€เชจเซ‡ 2-20 ms, เชตเช—เซ‡เชฐเซ‡ เชฅเชˆ เช—เชฏเซ‹ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡ เชฆเชธ เช—เชฃเซ‹ เชเชกเชชเซ€.

เชœเซ‹ เช†เชชเชฃเซ‡ เชคเซ‡เชจเซ‡ เชตเชงเซ เชธเชฐเซ‡เชฐเชพเชถ เชฒเชˆเช, เชคเซ‹ 350 ms เชจเซ‡ เชฌเชฆเชฒเซ‡ เช†เชชเชฃเชจเซ‡ 8 ms เชฎเชณเซ‡ เช›เซ‡.

เชธเซเชชเชทเซเชŸ เชซเชพเชฏเชฆเชพเช“เชฎเชพเช‚เชฅเซ€ เช…เชฎเชจเซ‡ เชชเชฃ เชฎเชณเซ‡ เช›เซ‡:

  1. เชตเชพเช‚เชšเชจเชจเชพ เชญเชพเชฐเชฎเชพเช‚ เชธเชพเชฎเชพเชจเซเชฏ เช˜เชŸเชพเชกเซ‹,
  2. เช…เชตเชฐเซ‹เชงเชฟเชค เชฅเชตเชพเชจเซ€ เชธเช‚เชญเชพเชตเชจเชพเชฎเชพเช‚ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เช˜เชŸเชพเชกเซ‹
  3. เชธเชฐเซ‡เชฐเชพเชถ เช…เชตเชฐเซ‹เชงเชฟเชค เชธเชฎเชฏเชจเซ‡ เชธเซเชตเซ€เช•เชพเชฐเซเชฏ เชฎเซ‚เชฒเซเชฏเซ‹ เชธเซเชงเซ€ เช˜เชŸเชพเชกเชตเซ‹

เชจเชฟเชทเซเช•เชฐเซเชท

เชกเซ‡เชŸเชพเชฌเซ‡เช เช•เซ‹เชฒเซเชธเชจเซเช‚ เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เช…เชจเซ‡ เชซเชพเช‡เชจ-เชŸเซเชฏเซเชจเชฟเช‚เช— เชเชฎเชเชธ เชเชธเช•เซเชฏเซเชเชฒ เชฆเซเชตเชพเชฐเชพ LINQ เชเช• เชธเชฎเชธเซเชฏเชพ เช›เซ‡ เชœเซ‡ เช‰เช•เซ‡เชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เช† เช•เชพเชฐเซเชฏเชฎเชพเช‚ เชธเชšเซ‡เชคเชคเชพ เช…เชจเซ‡ เชธเชพเชคเชคเซเชฏ เช–เซ‚เชฌ เชœ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡.

เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ€ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚:

  1. เชคเซ‡ เชกเซ‡เชŸเชพ เชคเชชเชพเชธเชตเซ‹ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ เช•เซ‡ เชœเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชตเชฟเชจเช‚เชคเซ€ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ (เชฎเซ‚เชฒเซเชฏเซ‹, เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒเชพ เชกเซ‡เชŸเชพ เชชเซเชฐเช•เชพเชฐเซ‹)
  2. เช† เชกเซ‡เชŸเชพเชจเซเช‚ เชฏเซ‹เช—เซเชฏ เช‡เชจเซเชกเซ‡เช•เซเชธเซ€เช‚เช— เช•เชฐเซ‹
  3. เช•เซ‹เชทเซเชŸเช•เซ‹ เชตเชšเซเชšเซ‡ เชœเซ‹เชกเชพเชตเชพเชจเซ€ เชธเซเชฅเชฟเชคเชฟเชจเซ€ เชถเซเชฆเซเชงเชคเชพ เชคเชชเชพเชธเซ‹

เช†เช—เชพเชฎเซ€ เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชชเซเชจเชฐเชพเชตเซƒเชคเซเชคเชฟ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡:

  1. เชตเชฟเชจเช‚เชคเซ€เชจเชพ เช†เชงเชพเชฐเซ‡ เช…เชจเซ‡ เชฎเซเช–เซเชฏ เชตเชฟเชจเช‚เชคเซ€ เชซเชฟเชฒเซเชŸเชฐเชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‡ เช›เซ‡
  2. เชธเชฎเชพเชจ เช•เซเชตเซ‡เชฐเซ€ เชฌเซเชฒเซ‹เช•เซเชธเชจเซเช‚ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เช…เชจเซ‡ เชถเชฐเชคเซ‹เชจเชพ เช†เช‚เชคเชฐเช›เซ‡เชฆเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
  3. เชฎเชพเชŸเซ‡ SSMS เช…เชฅเชตเชพ เช…เชจเซเชฏ GUI เชฎเชพเช‚ SQL เชธเชฐเซเชตเชฐ เชชเซ‹เชคเชพเชจเซ‡ เชถเซเชฐเซ‡เชทเซเช  เชฌเชจเชพเชตเซ‡ เช›เซ‡ SQL เช•เซเชตเซ‡เชฐเซ€ (เชเช• เชฎเชงเซเชฏเชตเชฐเซเชคเซ€ เชกเซ‡เชŸเชพ เชธเซเชŸเซ‹เชฐเซ‡เชœเชจเซ€ เชซเชพเชณเชตเชฃเซ€, เช† เชธเซเชŸเซ‹เชฐเซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ€ เช•เซเชตเซ‡เชฐเซ€ เชฌเชจเชพเชตเชตเซ€ (เชคเซเชฏเชพเช‚ เช˜เชฃเชพ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡))
  4. เช›เซ‡เชฒเซเชฒเชพ เชคเชฌเช•เซเช•เซ‡, เชชเชฐเชฟเชฃเชพเชฎเชจเซ‡ เช†เชงเชพเชฐเซ‡ เชฒเซ‡เชตเซเช‚ SQL เช•เซเชตเซ‡เชฐเซ€, เชฎเชพเชณเช–เซเช‚ เชซเชฐเซ€เชฅเซ€ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ LINQ เช•เซเชตเซ‡เชฐเซ€

เชชเชฐเชฟเชฃเชพเชฎเซ€ LINQ เช•เซเชตเซ‡เชฐเซ€ เช“เชณเช–เชพเชฏเซ‡เชฒ เชถเซเชฐเซ‡เชทเซเช  เชฎเชพเชŸเซ‡ เชฌเช‚เชงเชพเชฐเชฃเชฎเชพเช‚ เชธเชฎเชพเชจ เชฌเชจเชตเซเช‚ เชœเซ‹เชˆเช SQL เช•เซเชตเซ‡เชฐเซ€ เชฌเชฟเช‚เชฆเซ 3 เชฅเซ€.

เชธเซเชตเซ€เช•เซƒเชคเชฟเช“

เชธเชนเช•เชพเชฐเซเชฏเช•เชฐเซ‹เชจเซ‹ เช–เซ‚เชฌ เช–เซ‚เชฌ เช†เชญเชพเชฐ jobgemws ะธ alex_ozr เช•เช‚เชชเชจเซ€ เชคเชฐเชซเชฅเซ€ เชซเซ‹เชฐเซเชŸเชฟเชธ เช† เชธเชพเชฎเช—เซเชฐเซ€ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เชฎเชพเชŸเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹