แจแแกแแแแแ
ะ
แแฅ แแกแแแ แฌแแ แแแแแแแแแ แแแแแ แ แแแแแแแแ แแแแแแแแก แแแแแก แแแขแแแแแแชแแแก แแแแแ แ LINQ แแแแฎแแแแแแ.
แชแแแแแแแ, แ แแ LINQ(Language-Integrated Query) แแ แแก แแแ แขแแแ แแ แแแกแแฎแแ แฎแแแแแ แแแ แแแแแชแแแแ แฌแงแแ แแก แแแแฎแแแแแกแแแแก.
ะ LINQ SQL-แแ แแ แแก DBMS-แจแ แแแแแชแแแแแแก แฌแแแแแแก แขแแฅแแแแแแแ. แแก แแ แแก แแซแแแแ แ แแแกแขแ แฃแแแแขแ แแแแแชแแแแแแแ แแฃแจแแแแแกแแแแก, แกแแแแช แแแแฎแแแแแแ แแแแแฃแแแ แแแแแแ แแชแแฃแแ แแแแก แกแแจแฃแแแแแแ, แ แแแแแแช แจแแแแแ แแแแแแฅแชแแแ SQL แแแแฎแแแแแแ แแแแขแคแแ แแ แแ แแแแแแแแแแ แแแแแชแแแแ แแแแแก แกแแ แแแ แแ แจแแกแแกแ แฃแแแแแแ. แฉแแแแก แจแแแแฎแแแแแจแ, DBMS-แจแ แแแฃแแแกแฎแแแแ MS SQL แกแแ แแแ แ.
แแฃแแชแ, LINQ แแแแฎแแแแแแ แแ แแแ แแแแฅแแแแแ แแแขแแแแแฃแ แแ แแแฌแแ แแแแแแ SQL แแแแฎแแแแแแ, แ แแแแแแช แแแแแชแแแ DBA-แก แจแแแซแแ แแแแฌแแ แ แแแขแแแแแแชแแแก แงแแแแ แแแฃแแแกแแ SQL แแแแฎแแแแแแ:
- แแแขแแแแแฃแ แ แแแแจแแ แแแ (แจแแแแแแแแ แแแแ) แแ แจแแแแแแแแก แแแคแแแขแแ แ (WHERE)
- แแแแ แ แแแฃแแแกแ แแแแจแแ แแแแกแ แแ แฏแแฃแคแฃแ แ แแแ แแแแแแก แแแแแงแแแแแแจแ
- แแ แแแแแ แแแ แแแชแแ แฉแแแแชแแแแแแก แแแ แแแแแจแ IN on แแ แกแแแแแกะธ แแ แแ แแก, <> แฉแแ แแฃแแแ แแ แกแแแแแก
- แจแแแแแแแแก แจแฃแแแแแฃแ แ แฅแแจแแ แแแ แแ แแแแแแ แชแฎแ แแแแแแก, CTE, แชแฎแ แแแแก แชแแแแแแแแก แแแจแแแแแแ
- แฌแแแแแแแแแแก แแแแแงแแแแแ (OPTION) แแแกแขแ แฃแฅแชแแแแแแ แแ แชแฎแ แแแแก แแแแแจแแแแแแแ WITH (...)
- แแแแแฅแกแแ แแแฃแแ แฎแแแแแแก แแแแแงแแแแแ, แ แแแแ แช แแ แ-แแ แแ แกแแจแฃแแแแแ แจแแ แฉแแแแกแแก แแแแแแขแ แแแแแชแแแแแแก แฌแแแแแฎแแแกแแแ แแแแแก แแแกแแฆแฌแแแแ
แจแแแแแแก แซแแ แแแแแ แจแแกแ แฃแแแแแก แจแแคแแ แฎแแแแแ SQL แแแแฎแแแแแแ แจแแแแแแแกแแก LINQ แแแแฎแแแแแแ แแ แแแ:
- แแแแแชแแแแ แจแแ แฉแแแแก แแแแแ แแแฅแแแแแแแก แแแแ แแแแแแแ แแ แ แแแแฎแแแแแจแ
- แแแแแก แแแแแขแฃแ แ แแแแแแแแก แแฃแแแแ แแแ, แ แแช แกแแแแแแแ แแฌแแแแก แแ แแแแแ แแ แแกแแญแแ แ แแแแแชแแแแแแก แฌแแแแแฎแแแก
- แแ แแแแแแแแแแแแแขแแแแ แแแ แแแแแแก แฏแแฃแคแแแ (แแแแแแฃแ แ "แแ" แแ "แแ") - แแ ะธ ORแแแแแแแฅแกแฃแ แแแ แแแแแจแ แแแแ แแแแแแแ แแฌแแแแก แแ แคแแฅแขแก, แ แแ แแแขแแแแแแขแแ แ, แ แแแแแกแแช แแฅแแก แจแแกแแแแแแกแ แแ แแแแแกแขแแ แฃแแ แแแแแฅแกแแแ แกแแญแแ แ แแแแแแแกแแแแก, แกแแแแแแแ แแฌแงแแแก แกแแแแแ แแแแก แแแแกแขแแ แฃแแ แแแแแฅแกแแก แแแแแ แ (แแแแแฅแกแแก แกแแแแแ แแแ) แแแ แแแแแแก แฏแแฃแคแแแแก แแแฎแแแแแ
- แฅแแแแแแฎแแแแแแแก แฆแ แแ แแฃแแแแ แแแ แกแแ แแแแก แซแแแแแ แแ แแแแแแฃแ แแ SQL แแแแชแฎแแแแแแแ แแ แจแแแแแฎแแแก แแแแแแก แแแแแแแ แแแแแแแแแ แแแแก แแฎแ แแแแ แแ DBA
แแแขแแแแแแชแแแก แแแแแแแแ
แแฎแแ แแแ แแแแแ แแแแแแแแแ แแแขแแแแแแชแแแก แแแแแแแแแ.
1) แแแแแขแแแแแ แแแแแฅแกแแ แแแ
แฃแแฏแแแแกแแ แแแแแฎแแแแ แคแแแขแ แแแ แแแแแแ แจแแ แฉแแแแก แชแฎแ แแแแแแ, แ แแแแแ แซแแแแแ แฎแจแแ แแ แแแแแ แแแแฎแแแแ แแแแแฃแแแ แแ แแ แแ แแ แ แซแแ แแแแแ แชแฎแ แแแแก แแแ แจแแแ (แแแแแแแชแแแแ-แแแแแแแแแแ-แแแแ แแชแแแแ) แแ แแแ แแแแแแก แกแขแแแแแ แขแฃแแ แแแแ แแแแ (แแแฎแฃแ แฃแแแ, แแแฃแฅแแแแฃแแ, แฉแแ แแฃแแแ, แกแขแแขแฃแกแ). แแแแจแแแแแแแแแแ แแแแแแแแแแแ แแแแฃแจแแแแกแแแแก แจแแกแแแแแแกแ แแแแแฅแกแแแแก แจแแฅแแแ.
แแก แแแแแกแแแแแ แแแ แ แแฅแแก, แ แแแแกแแช แแ แแแแแแแก แแ แฉแแแ แแแแจแแแแแแแแแ แแฆแฃแแแแก แแแแ แฃแแแแฃแ แแแแแแแฅแขแก แแแแฎแแแแแแ.
แแแแแแแแแ, แแแแฅแแก 500000 2000 แแแแแชแฎแแแ. แแฃแแชแ, แแฎแแแแ XNUMX แแฅแขแแฃแ แ แแแแแแแชแแแ. แแแจแแ แกแฌแแ แแ แจแแ แฉแแฃแแ แแแแแฅแกแ แแแแแแฎแกแแแก แแแแแฅแกแแก แกแแแแแ แแแ แแแ แแแแแแแแ แแ แกแแจแฃแแแแแแก แแแแชแแแ แกแฌแ แแคแแ แแแ แฉแแแ แแแแแชแแแแแ แแ แแแแแกแขแแ แฃแแ แแแแแฅแกแแก แกแแจแฃแแแแแแ.
แแกแแแ, แแแแแฅแกแแแแก แแแแแแแแแแก แแแแแขแแคแแชแแ แแแ แจแแกแแซแแแแแแแ แจแแแแแฎแแแก แแแแแแแแก แแแแแแแแก แแ แกแแกแขแแแแก แฎแแแแแก แกแขแแขแแกแขแแแแก แจแแแ แแแแแแก แแแแฎแแแแแก แกแแจแฃแแแแแแ. MS SQL แกแแ แแแ แ:
แแแฎแแแก แงแแแแ แแแแแชแแแ แจแแแชแแแก แแแคแแ แแแชแแแก แแแแแ แแฃแแ แแแแแฅแกแแแแก แจแแกแแฎแแ, แแแ แแ แกแแแ แชแแแ แแแแแฅแกแแแแกแ.
แแฃแแชแ, แแแแแฅแกแแแ แแ แฅแแจแแ แแแ แฎแจแแ แแ แแ แแกแฌแแ แแ แแแฌแแ แแแ แจแแแแแแแแก แฌแแแแแฆแแแแ แแ แซแแแแก แแแแแแแแแ LINQ แแแแฎแแแแแแ ะธ SQL แแแแฎแแแแแแ.
แ แแแแ แช แชแฎแแแ แแแแก แแแแชแ แ แแ แแฅแขแแแ แแแแฉแแแแแแก, แฎแจแแ แแ แแแแแแกแแกแแแแก แแแแจแแแแแแแแแแ แแแแแแกแแก แแแฎแแกแแแแแแแแแแก แแแ แแแแฃแแ แแแแแแแก แแแแแ แแแ. แแ แแแแขแแ, แแซแแแ แแแแฎแแแแแแ แฎแจแแ แแ แแแแแแแก แคแแแแ แฅแแจแแ แแแแ.
แแก แแแฌแแแแแ แแ แแแแแ แแแแแฃแแแ, แ แแแแแ แแแแฎแแแ แแแแแก แงแแแแแแแแก แแ แกแญแแ แแแแ แฃแแฎแแแกแ แแแแแชแแแแแ แแ แแ แกแแแแแก แแแแฎแแแ แแแแแก แแแขแแ แคแแแกแแก แ แแแแแ แแแแก แแแกแแฆแแแ แแแแ.
แแก แแแแแแแ แกแแจแฃแแแแแแก แแซแแแแ แแแแแญแ แแก แแแแแแกแแก แกแแญแแ แแแแแแ, แแแแ แแ แกแแแแแแแ แแแชแแ แแแก แแแคแแ แแแชแแฃแแ แกแแกแขแแแแก แแฃแจแแแแแก แแ แแแแแแแแแก แแแแแฌแงแแแขแแก แฃแแ แแแแ แแแแแแแแแก แแแแ.
แแกแแแ แฃแแแ แแแแฎแกแแแแแก, แ แแ แแแกแแแแขแแแแแ แกแแญแแ แ แแแแแฅแกแแแแก แซแแแแแก แแ แแชแแกแจแ, แฌแแแแแแแแแแแ MS SQL แแแขแแแแแแชแแ แจแแแซแแแแ แแงแแก แแ แแกแฌแแ แ, แแแ แจแแ แแก แจแแแแแ แแแ แแแแแจแ:
- แแฃ แฃแแแ แแ แแก แแแแแฅแกแแแ แแแแแแแก แแกแแแแกแ แแแแ แแแแ
- แแฃ แชแฎแ แแแแก แแแแแแแก แแแแแฅแกแแ แแแ แจแแฃแซแแแแแแแ แแแแแฅแกแแ แแแแก แจแแแฆแฃแแแแแแก แแแแ (แฃแคแ แ แแแขแแแฃแ แแ แแ แแก แแฆแฌแแ แแแ
แแฅ ).
2) แแขแ แแแฃแขแแแแก แจแแ แฌแงแแ แแ แ แแฎแแ แแขแ แแแฃแขแแ
แแแแฏแแ แแแแแแ แแ แแแแ แแ แแ แชแฎแ แแแแแแ, แ แแแแแแช แแแกแแฎแฃแ แแแ แแแ แแแแแแก แฏแแฃแคแแก แกแแคแฃแซแแแแก, แจแแแซแแแแ แจแแแชแแแแแก แแ แแ แแฎแแแ แแแแแก แจแแแแขแแแแ.
แแก แแแแกแแแฃแแ แแแแ แแฎแแแ แกแขแแขแฃแกแแก แแแแแแก, แ แแแแแแแช แฉแแแฃแแแแ แแ แแ แแก แแแขแแก แแ แแแแแ แ แแชแฎแแแก แขแแแแก.
แแแแแแแแ:
IsClosed = 0 แแ แแแฃแฅแแแแฃแแแ = 0 แแ แฉแแ แแฃแแแ = 0 แจแแแชแแแแ แกแขแแขแฃแกแ = 1.
แแฅ แแ แแก แแแแแ แ แแชแฎแแแก แกแขแแขแฃแกแแก แแขแ แแแฃแขแ, แ แแแ แฃแแ แฃแแแแแงแแก, แ แแ แแก แกแขแแขแฃแกแแแ แจแแแกแแแฃแแแ แชแฎแ แแแจแ. แจแแแแแแ, แแก แแฎแแแ แแขแ แแแฃแขแ แแแแแฅแกแแ แแแฃแแแ.
แแก แแ แแก แแฃแจแแแแแก แแ แแแแแแแก แคแฃแแแแแแแขแฃแ แ แแแแแฌแงแแแขแ, แ แแแแแ แฉแแแ แแฌแแแแแแ แแแแแชแแแแแก แแแแแแขแ แแแแแแแแแแแก แแแ แแจแ.
3) แฎแแแแก แแแขแแ แแแแแแแชแแ
แกแแแฌแฃแฎแแ แแ, แจแ LINQ แแแแฎแแแแแแ แแ แแแแแแ แชแฎแ แแแแแ, CTE-แแแ แแ แชแฎแ แแแแก แชแแแแแแแ แแแ แแแแแ แแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก.
แแฃแแชแ, แแ แจแแแแฎแแแแแกแแแแก แแแขแแแแแแชแแแก แแแแแ แแ แแ แแแ แแ แกแแแแแก - แแแแแฅแกแแ แแแฃแแ แฎแแแแแ.
แแแ แแแแแแก แฏแแฃแคแ (แแแแแ แแแงแแแแแแ แแแแแแแแแแแ) IsClosed = 0 แแ แแแฃแฅแแแแฃแแแ = 0 แแ แฉแแ แแฃแแแ = 0 (แแ แกแฎแแ แแกแแแแกแ แแแ แแแแแแก แแแแ แแแ) แฎแแแแ แแแ แแ แแแ แแแแขแ แแแแ แแแแแฅแกแแ แแแฃแแ แฎแแแแก แแแแแกแแงแแแแแแแ, แแแแ แแแแ แแแแแแ แแแแแชแแแแแแก แแชแแ แ แแแฌแแแแก แฅแแจแแ แแแแ.
แแแแ แแ แแ แกแแแแแก แแแแแ แ แแแ แจแแแฆแฃแแแแแ แฎแแแแแก แแแขแแ แแแแแแแชแแแกแแก:
- แฅแแแแแแแแฎแแแแแก, แแฃแแฅแขแแแแก แแแแแงแแแแแ แแ แกแแแแแก แฃแแแ แจแแแชแแแแแก แแแแแงแแแแแแ แจแแแแแแแแ แแแแ
- แแฅแแแ แแ แจแแแแซแแแแ แแแแแแงแแแแ แฌแแแแแแแแแแแ UNION, แแแแ แแแแแแแ แงแแแแ, แแแแแแแแแแกแ, แฃแ แแแแ แแแแแจแแ แ
- แแฅแแแ แแ แจแแแแซแแแแ แแแแแแงแแแแ แชแฎแ แแแแก แแแแแจแแแแแแ แแ แแฃแแฅแขแแแ OPTION
- แชแแแแแแแแ แแฃแจแแแแแก แจแแกแแซแแแแแแแ แแ แแ แกแแแแแก
- แจแแฃแซแแแแแแแ แแแแแชแแแแแแก แฉแแแแแแ แแ แ แฎแแแจแ แกแฎแแแแแกแฎแแ แชแฎแ แแแแแแ
แแแแจแแแแแแแแแแ แแแแฎแกแแแแแก, แ แแ แแแแแฅแกแแ แแแฃแแ แฎแแแแก แแแแแงแแแแแแก แ แแแแฃแ แ แกแแ แแแแแแ แแแแฆแฌแแแ แแฎแแแแ แแแกแ แ แแแแฃแ แแ แแแแแฅแกแแ แแแแ.
แแแแ แแ แฎแแแแก แแแแแซแแฎแแแแกแแก, แแก แแแแแฅแกแแแ แจแแแซแแแแ แแ แแงแแก แแแแแงแแแแแฃแแ แแ แแแแ แชแแแกแแฎแแ แแแแแกแแงแแแแแแแ, แแฅแแแ แฃแแแ แแแฃแแแแแ WITH (NOEXPAND).
แแแก แจแแแแแ, แ แแช LINQ แแแแฎแแแแแแ แชแฎแ แแแแก แแแแแจแแแแแแแก แแแแกแแแฆแแ แ แจแแฃแซแแแแแแแ, แแกแ แ แแ แแฅแแแ แฃแแแ แจแแฅแแแแ แกแฎแแ แฌแแ แแแแแแแ - แจแแแแแแ แคแแ แแแก โแจแแคแฃแแแโ:
CREATE VIEW ะะะฏ_ะฟัะตะดััะฐะฒะปะตะฝะธั AS SELECT * FROM MAT_VIEW WITH (NOEXPAND);
4) แชแฎแ แแแแก แคแฃแแฅแชแแแแแก แแแแแงแแแแแ
แฎแจแแ แแ แจแแแแแ LINQ แแแแฎแแแแแแ แฅแแแแแแฎแแแแแแแก แแแแ แแแแแแแ แแ แแแแแแแ แ แแฃแแ แกแขแ แฃแฅแขแฃแ แแก แแฅแแแ แฎแแแแแแก แแแแแงแแแแแแ แฅแแแแแ แกแแแแแแ แแแแฎแแแแแก แซแแแแแ แ แแฃแแ แแ แแ แแแแขแแแแแฃแ แ แจแแกแ แฃแแแแแก แกแขแ แฃแฅแขแฃแ แแ.
แชแฎแ แแแแก แคแฃแแฅแชแแแแแก แแแแแงแแแแแแก แซแแ แแแแแ แฃแแแ แแขแแกแแแแแ LINQ แแแแฎแแแแแแ:
- แจแแกแแซแแแแแแแ, แ แแแแ แช แฎแแแแแแก แจแแแแฎแแแแแจแ, แแงแแก แแแแแงแแแแแฃแแ แแ แแแแแแแแฃแแ, แ แแแแ แช แแแแแฅแขแ, แแแแ แแ แจแแแแซแแแแ แแแแแกแชแแ แจแแงแแแแแก แแแ แแแแขแ แแแแก แแแแ แแแ:
FROM FUNCTION (@param1, @param2 ...)
แจแแแแแแ, แจแแกแแซแแแแแแแ แแแแแชแแแแ แแแฅแแแแ แจแแ แฉแแแแก แแแฆแฌแแแ - แชแฎแ แแแแก แคแฃแแฅแชแแแก แแแแแงแแแแแแก แจแแแแฎแแแแแจแ, แแ แแ แกแแแแแก แแกแแแ แซแแแแ แ แจแแแฆแฃแแแแแ, แ แแแแ แช แแแแแ แแฆแฌแแ แแแ แแแแแฅแกแแ แแแฃแแ แฎแแแแแแก แจแแแแฎแแแแแจแ:
- แชแฎแ แแแแก แแแแแจแแแแแแ:
แแแจแแแแแแ LINQ แแฅแแแ แแ แจแแแแซแแแแ แแแฃแแแแแ แ แแแแแ แแแแแฅแกแแแ แฃแแแ แแงแแก แแแแแงแแแแแฃแแ แแ แแแแกแแแฆแแ แแ แแแแแชแแแแ แแแแแแชแแแก แแแแ แจแแแแแฎแแแกแแก.
แแแแ แแ แคแฃแแฅแชแแแก แแฅแแก แแก แจแแกแแซแแแแแแแแแ.
แคแฃแแฅแชแแแ แจแแแแซแแแแ แแแแฆแฌแแแ แกแแแแแแ แแฃแแแแ แจแแกแ แฃแแแแแก แจแแแแแฎแแแก แแแแแแก, แกแแแแช แแแแกแแแฆแแ แฃแแแ แแแแแฅแกแแแแแ แแฃแจแแแแแก แฌแแกแแแ แแ แแแแแชแแแแ แแแแแแชแแแก แแแแแแแ. - แคแฃแแฅแชแแแก แแแแแงแแแแแ แกแแจแฃแแแแแแก แแแซแแแแ, แแแแแฅแกแแ แแแฃแ แฎแแแแแแแ แจแแแแ แแแแ, แแแแฆแแ:
- แแแแแชแแแแ แจแแ แฉแแแแก แ แแฃแแ แแแแแแ (แแฃแแแแช แแแ แงแฃแแแแแก แแแแแงแแแแแแ)
- แแแแแชแแแแแแก แแแฆแแแ แแ แแแแแ แกแฎแแแแแกแฎแแ แชแฎแ แแแแแแ
- แแแแแงแแแแแแก UNION ะธ แแ แกแแแแแก
- แชแฎแ แแแแก แแแแแจแแแแแแ:
- แจแแแแแแแแแ OPTION แซแแแแแ แกแแกแแ แแแแแแ, แ แแแแกแแช แฉแแแ แแแญแแ แแแแ แแแแแฃแ แแแขแฃแแ แแแแขแ แแแแก แฃแแ แฃแแแแแงแแคแ OPTION (MAXDOP N), แจแแแแแฎแแแก แจแแกแ แฃแแแแแก แแแแแแก แแแแแแแแแแ แแแ. แฒแแแแแแแแ:
- แแฅแแแ แจแแแแซแแแแ แแแฃแแแแแ แจแแแแแฎแแแก แแแแแแก แแซแฃแแแแแแ แฎแแแแฎแแแ แจแแฅแแแ OPTION (แฎแแแแฎแแแ แแแแแแแแชแแ)
- แจแแแแซแแแแ แแแฃแแแแแ, แแแซแฃแแแ แแฃ แแ แ แจแแแแแฎแแแก แแแแแ แแแแแแงแแแแก แแแแฎแแแแแจแ แแแแแแแแฃแแ แจแแแ แแแแแก แแ แซแแแแแ OPTION (แแซแฃแแแแแแ แจแแแแแแ)
แแแขแ แแแขแแแ แจแแกแแฎแแ OPTION แแฆแฌแแ แแแ
แแฅ . - แแแแแชแแแแ แงแแแแแแ แแแฌแ แ แแ แงแแแแแแ แกแแญแแ แ แแแฌแแแแก แแแแแงแแแแแแ:
แแ แแ แแก แกแแญแแ แ แแแแ แแแแแชแแแแ แแแแ แแแแก แจแแแแฎแแ แฅแแจแแแจแ (แ แแแแ แช แแก แแ แแก แแแแแฅแกแแ แแแฃแแ แฎแแแแแแก แจแแแแฎแแแแแจแ), แกแแแแแแแช แฏแแ แแแแแ แแญแแ แแแแแ แแแแแชแแแแแแก แแแคแแแขแแ แ แแแ แแแแขแ แแแแก แแแฎแแแแแ.
แแแแแแแแแ, แแ แแก แชแฎแ แแแ, แ แแแแแก แคแแแขแ แ WHERE แแแแแงแแแแแฃแแแ แกแแแ แแแแ (แ, แ, แ).แแแ แแแแแแ, แงแแแแ แแแแฎแแแแแก แแฅแแก แแฃแแแแแ แแแแแแแ แแแแ a = 0 แแ b = 0.
แแฃแแชแ แแฎแแแแ แแแแแแแแ c แฃแคแ แ แชแแแแแแแแ.
แแแฃแจแแแ แแแ แแแ a = 0 แแ b = 0 แแก แแแแแแแแแ แแแแฎแแแ แแแ แจแแแแฆแฃแแแ แกแแญแแ แ แจแแแแแแ แแแฆแแแฃแแ แแแแ แแแ แแแแกแแแแ แฉแแแแฌแแ แแ, แแแแ แแ แแก แแแ แแแแ ั แแแแฌแ แแแแก แจแแ แฉแแแแก แแกแแแแ แฉแแแแฌแแ แแแแ.
แแฅ แชแฎแ แแแแก แคแฃแแฅแชแแ แจแแแซแแแแ แแงแแก แฃแแแแแกแ แแแ แแแแขแ.
แแกแแแ, แชแฎแ แแแแก แคแฃแแฅแชแแ แฃแคแ แ แแ แแแแแแแ แแแแแ แแ แแแแแแแแแแ แฃแแแ แจแแกแ แฃแแแแแก แแ แแก.
แแแแแแแแแแ
แแแแแ แจแแแฎแแแแ แแแแฎแแ แชแแแแแแแก แแแแแแแแก, แแแแแแแแแ, แแแแฎแแแแแก แแแแแชแแแแ แแแแแก แแแแแงแแแแแแ.
แแ แแก แแฎแแแแ แแแ แฉแแแ, แ แแแแแแช แแแ แแแแแแแก แ แแแแแแแแ แชแฎแ แแแก แแ แแงแแแแแก แแ แ แฎแแแก (OperativeQuestions), แ แแแแแจแแช แแฃแแแแแแแแ แแแฌแแแแแ แแแแฅแขแ แแแฃแแ แคแแกแขแแ (แแแจแแแแแแ แแ แกแแแแแก) โแแแแ แแขแแฃแ แแแแฎแแแแแโ:
แแแแฎแแแแ No1
(@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 แกแแจแฃแแแแแแก แแแแแชแแแก แจแแแแฆแฃแแแ แแแแแแแแแแ แแ แฉแแแแแ แแ แกแแแแแก) แแกแแแแ แฉแแแแฌแแ แ.
แแ แจแแแซแแแแ แฉแแแแแก, แ แแ แฅแแแแแแฎแแแแแ แฃแแแ แแแแแแแแแแก แฉแแแแฌแแ แแแ แแ แแฎแแ [Email] = @p__linq__0-แแ แแ แจแแแแแ แแก แ แแแแแแแแ แแกแแฃแแ แฉแแแแฌแแ แ แฃแแแ แแงแแก แแแแแแจแแ แแแฃแแ Id-แแ Questions-แแ แแ แแแแฎแแแแ แแฅแแแแ แกแฌแ แแคแ.
แคแแฅแขแแแ แแแแ, แแ แกแแแแแก แงแแแแ แชแฎแ แแแแก แแแแแแแแแแ แฃแแ แแแแจแแ แ: Id Questions-แแก แจแแกแแแแแแกแแแแก แจแแแแฌแแแแ Id-แแแ OperativeQuestions-แแแ แแ แแแคแแแขแแ แ แแแแฅแขแ แแแฃแแ แคแแกแขแแ.
แกแแแแแแแแแแจแ, แแแแฎแแแแ แแฃแจแแแแก แแแแแแแกแแแแ OperativeQuestions แฉแแแแฌแแ แแแ, แแแแ แแ แแฎแแแแ แกแแแแขแแ แแกแ แแแแแชแแแแแแ แกแแญแแ แ แแ.แคแแกแขแแก แกแแจแฃแแแแแแ.
OperativeQuestions แขแแฅแกแขแแก แแแฎแแ:
แแแแฎแแแแ No2
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();
แแ แแแแแ แแขแฃแ แจแแแแฎแแแแแจแ แแแแแแฎแแแแแ แแ แแ แแแแแแแก แแแแแฌแงแแแขแแก แแแคแ แแกแขแ แฃแฅแขแฃแ แฃแแ แชแแแแแแแแแแก แแแ แแจแ, แชแแแแ แชแฎแ แแแแก แจแแแแฆแแแแก แแแ แแจแ แแแ แจแแแแแแแแ (โแแฅแขแแฃแ แ แแแแฎแแแแแแโ), แ แแแแแแช แกแแญแแ แแแแก แแแแแชแแแแ แจแแแกแแแแก แแ แแแแแฎแแแแแก แแแฅแแแแแแก. .
แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแก แแแ แแ แแแแแกแแแแแแ, แแ แแ แแแแแแแก แแแขแแแแแแชแแแก แแแแแ แแ แแ แแแ แแแแขแ แแ แกแแแแแก.
แแแแแแ แ แแแแแแแ แฉแแแแฌแแ แแแแก แฅแแจแแ แแแ [Email] = @p__linq__0-แแ OperativeQuestions แฎแแแแแแ.
แจแแแงแแแแแ แชแฎแ แแแแก แคแฃแแฅแชแแ [dbo].[OperativeQuestionsUserMail] แแแแแชแแแแ แแแแแจแ.
แแ.แคแแกแขแแก, แ แแแแ แช แจแแงแแแแแก แแแ แแแแขแ แแก แแแแแแแแแ, แฉแแแ แแแฆแแแ แแแแจแแแแแแแแแแก แชแฎแ แแแก:
แแแแฎแแแแ No3
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-แแ:
แแแแฎแแแแ No4
(@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 ms-แแแ 2-20 ms-แแแ แแ แ.แจ., แแแฃ แแแฏแแ แฃแคแ แ แกแฌแ แแคแแ.
แแฃ แฃแคแ แ แกแแจแฃแแแแ แแแแแฆแแแ, แแแจแแ 350 ms-แแก แแแชแแแแ แแแแแฆแแ 8 ms.
แแจแแแ แ แฃแแแ แแขแแกแแแแแแแแ แฉแแแ แแกแแแ แแแฆแแแ:
- แแแแฎแแแก แแแขแแแ แแแแก แแแแแแ แจแแแชแแ แแแ,
- แแแแแแ แแแแก แแแแแแแแแก แแแแจแแแแแแแแแ แจแแแชแแ แแแ
- แแแแแแแแแก แกแแจแฃแแแ แแ แแแก แแแกแแจแแแ แแแแจแแแแแแแแแแแแ แจแแแชแแ แแแ
แแแแแงแแแแแก
แแแแแชแแแแ แแแแแก แแแ แแแแก แแแขแแแแแแชแแ แแ แแแแฃแกแขแแแ MS SQL แแแจแแแแแแ LINQ แแ แแก แแ แแแแแแ, แ แแแแแก แแแแแแ แแแแช แจแแกแแซแแแแแแแ.
แแ แกแแฅแแแจแ แซแแแแแ แแแแจแแแแแแแแแแ แงแฃแ แแแฆแแแ แแ แแแแแแแแแแ แฃแแแแ.
แแ แแชแแกแแก แแแกแแฌแงแแกแจแ:
- แแฃแชแแแแแแแแ แจแแแแแฌแแแ แแแแแชแแแแแ, แ แแแแแแแแแแช แแฃแจแแแแก แแแแฎแแแแ (แแแแจแแแแแแแแแ, แแแแแชแแแแ แจแแ แฉแแฃแแ แขแแแแแ)
- แแแแแฎแแ แชแแแแแ แแ แแแแแชแแแแแแก แกแแแแแแแ แแแแแฅแกแแ แแแ
- แจแแแแแฌแแแ แชแฎแ แแแแแก แจแแ แแก แจแแแ แแแแแก แแแ แแแแแแก แกแแกแฌแแ แ
แจแแแแแแ แแแขแแแแแแชแแแก แแแแแแ แแแ แชแฎแแแงแแคแก:
- แแแแฎแแแแแก แกแแคแฃแซแแแแแ แแ แแแแกแแแฆแแ แแแก แแแแฎแแแแแก แแแแแแ แคแแแขแ แก
- แแกแแแแกแ แแแแฎแแแแแก แแแแแแแแก แแแแแแ แแแ แแ แแแ แแแแแแก แแแแแแแแแแก แแแแแแแ
- SSMS-แจแ แแ แกแฎแแ GUI-แจแ แแแแกแแแแก SQL Server แแแขแแแแแแแก แแแแแก แแแแก SQL แจแแแแแฎแแ (แแแแแชแแแแ แจแฃแแแแแฃแ แ แกแแชแแแแก แแแแแงแแคแ, แแแฆแแแฃแแ แแแแฎแแแแแก แจแแฅแแแ แแ แกแแชแแแแก แแแแแงแแแแแแ (แจแแแซแแแแ แแงแแก แ แแแแแแแแ))
- แแแแ แแขแแแแ, แแแฆแแแฃแแ แกแแคแฃแซแแแแ SQL แจแแแแแฎแแ, แกแขแ แฃแฅแขแฃแ แแก แแฆแแแแแ แแแแแแแแ แแแแก LINQ แจแแแแแฎแแ
แจแแแแแแ แแแฆแแแฃแแ LINQ แจแแแแแฎแแ แกแขแ แฃแฅแขแฃแ แแจแ แแแแแขแฃแ แ แฃแแแ แแงแแก แแแแแแแแแแแ แแแขแแแแแฃแ แแก SQL แจแแแแแฎแแ แแ-3 แฌแแ แขแแแแแแ.
แแแแแแแ
แแแแ แแแแแแแ แแแแแแแแก
แฌแงแแ แ: www.habr.com