αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžŸαŸ†αžŽαž½αžš LINQ αž“αŸ…αž€αŸ’αž“αž»αž„ C#.NET

αžŸαŸαž…αž€αŸ’αžαžΈαžŽαŸ‚αž“αžΆαŸ†

Π’ αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž˜αž½αž™αž…αŸ†αž“αž½αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž…αžΆαžšαžŽαžΆ αžŸαŸ†αžŽαž½αžš LINQ.
αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž™αžΎαž„αž€αŸαž”αž„αŸ’αž αžΆαž‰αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž˜αž½αž™αž…αŸ†αž“αž½αž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž€αžΌαžŠαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„ αžŸαŸ†αžŽαž½αžš LINQ.

αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαŸ’αž‚αžΆαž›αŸ‹αžαžΆ αž›αžΈαž“(Language-Integrated Query) αž‚αžΊαž‡αžΆαž—αžΆαžŸαžΆαžŸαžΆαž˜αž‰αŸ’αž‰ αž“αž·αž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž½αžšαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”

А LINQ αž‘αŸ… SQL αž‚αžΊαž‡αžΆαž”αž…αŸ’αž…αŸαž€αžœαž·αž‘αŸ’αž™αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž…αžΌαž›αž”αŸ’αžšαžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αŸ’αž“αž»αž„ DBMS αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαžŠαŸαž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‘αž·αž“αŸ’αž“αž“αŸαž™ αžŠαŸ‚αž›αžŸαŸ†αžŽαž½αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžαžΆαž˜αžšαž™αŸˆαž—αžΆαžŸαžΆαž”αŸ’αžšαž€αžΆαžŸ αžŠαŸ‚αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž‘αŸ…αž‡αžΆ αžŸαŸ†αžŽαž½αžš SQL platform αž“αž·αž„αž•αŸ’αž‰αžΎαž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ„αž™ DBMS αž™αžΎαž„αž˜αžΆαž“αž“αŸαž™αžαžΆ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž˜αŸ’αžšαžΎ MS SQL.

αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆ, αžŸαŸ†αžŽαž½αžš LINQ αž˜αž·αž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ†αž”αŸ’αž›αŸ‚αž„β€‹αž‘αŸ…β€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αžŸαžšαžŸαŸαžšβ€‹αžŠαŸ‚αž›β€‹αž›αŸ’αž’β€‹αž”αŸ†αž•αž»αžβ€‹αž‘αŸαŸ” αžŸαŸ†αžŽαž½αžš SQLαžŠαŸ‚αž› DBA αžŠαŸ‚αž›αž˜αžΆαž“αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž’αžΆαž…αžŸαžšαžŸαŸαžšαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž—αžΆαž–αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž– αžŸαŸ†αžŽαž½αžš SQL:

  1. αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž›αŸ’αž’αž”αŸ†αž•αž»αž (αž…αžΌαž›αžšαž½αž˜) αž“αž·αž„αžαŸ’αžšαž„αž›αž‘αŸ’αž’αž•αž› (αž‘αžΈαž€αž“αŸ’αž›αŸ‚αž„)
  2. nuances αž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ αž“αž·αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž€αŸ’αžšαž»αž˜
  3. αž€αžΆαžšαž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‡αŸ†αž“αž½αžŸαž›αž€αŸ’αžαžαžŽαŸ’αžŒ IN αž“αŸ…αž›αžΎ αž“αž·αž€αŸ’αžαŸαž”αž”αž‘ΠΈ αž˜αž·αž“β€‹αž“αŸ…αž€αŸ’αž“αž»αž„, <> αž›αžΎ αž“αž·αž€αŸ’αžαŸαž”αž”αž‘
  4. αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž€αž˜αŸ’αžšαž·αžαž˜αž’αŸ’αž™αž˜αž“αŸƒαž›αž‘αŸ’αž’αž•αž›αžαžΆαž˜αžšαž™αŸˆαžαžΆαžšαžΆαž„αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“ CTE αž’αžαŸαžšαžαžΆαžšαžΆαž„
  5. αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ’αžšαž™αŸ„αž‚ (αž‡αž˜αŸ’αžšαžΎαžŸ) αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž“αž·αž„αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžαžΆαžšαžΆαž„ αž‡αžΆαž˜αž½αž™ (... )
  6. αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αž‡αžΆαž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž€αž˜αŸ’αž…αžΆαžαŸ‹αž€αžΆαžšαž’αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž›αŸ‚αž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžαž‘αŸ…αž‘αŸ€αžαž’αŸ†αž‘αž»αž„αž–αŸαž›αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ

αž€αžΆαžšαžšαžΆαŸ†αž„αžŸαŸ’αž‘αŸ‡αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŸαŸ†αžαžΆαž“αŸ‹αž“αŸƒαž›αž‘αŸ’αž’αž•αž› αžŸαŸ†αžŽαž½αžš SQL αž“αŸ…αž–αŸαž›αž…αž„αž€αŸ’αžšαž„ αžŸαŸ†αžŽαž½αžš LINQ αž‚αžΊ:

  1. αž€αžΆαžšαž”αž„αŸ’αžšαž½αž”αž”αž„αŸ’αžšαž½αž˜αž“αŸƒαž™αž“αŸ’αžαž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαžΎαž˜αž½αž™αŸ”
  2. αžŸαŸ’αž‘αž½αž“αž”αŸ’αž›αž»αž€αž€αžΌαžŠαžŠαžΌαž…αž‚αŸ’αž“αžΆ αžŠαŸ‚αž›αž“αŸ…αž‘αžΈαž”αŸ†αž•αž»αžαž“αžΆαŸ†αž‘αŸ…αžŠαž›αŸ‹αž€αžΆαžšαž’αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž…αŸ’αžšαžΎαž“αŸ”
  3. αž€αŸ’αžšαž»αž˜αž“αŸƒαž›αž€αŸ’αžαžαžŽαŸ’αžŒαž–αž αž»αžŸαž˜αžΆαžŸαž—αžΆαž‚ (αž‘αžΌαž‡αžΈαžαž› "αž“αž·αž„" αž“αž·αž„ "ឬ") - αž“αž·αž„ ΠΈ ORαžŠαŸ„αž™αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŠαŸαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰ αž“αžΆαŸ†αž±αŸ’αž™αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαžŠαŸ‚αž›αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž…αž„αŸ’αž€αŸ„αž˜αžŸαž˜αžšαž˜αŸ’αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆαž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹ αž‘αžΈαž”αŸ†αž•αž»αžαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸ’αž€αŸαž“αž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž…αž„αŸ’αž€αŸ„αž˜ (INDEX αžŸαŸ’αž€αŸαž“) αžαžΆαž˜αž€αŸ’αžšαž»αž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒ
  4. αž€αžΆαžšβ€‹αžŠαžΆαž€αŸ‹β€‹αžŸαŸ†αž”αž»αž€β€‹αž‡αŸ’αžšαŸ…β€‹αž“αŸƒβ€‹αžŸαŸ†αžŽαž½αžšβ€‹αžšαž„β€‹αž’αŸ’αžœαžΎβ€‹αž±αŸ’αž™β€‹αž€αžΆαžšβ€‹αž‰αŸ‚αž€β€‹αž˜αžΆαž“β€‹αž”αž‰αŸ’αž αžΆβ€‹αžαŸ’αž›αžΆαŸ†αž„β€‹αžŽαžΆαžŸαŸ‹αŸ” αžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸ SQL αž“αž·αž„αž€αžΆαžšαžœαž·αž—αžΆαž‚αž“αŸƒαž•αŸ‚αž“αž€αžΆαžšαžŸαŸ†αžŽαž½αžšαž“αŸ…αž›αžΎαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž“αž·αž„ αžŠαžΆαž”αžΆ

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαžΌαž˜αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αŸ”

1) αž€αžΆαžšαž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αž”αž“αŸ’αžαŸ‚αž˜

αžœαžΆαž‡αžΆαž€αžΆαžšαž›αŸ’αž’αž”αŸ†αž•αž»αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αž·αž…αžΆαžšαžŽαžΆαž›αžΎαžαž˜αŸ’αžšαž„αž“αŸ…αž›αžΎαžαžΆαžšαžΆαž„αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž˜αŸ αž–αŸ’αžšαŸ„αŸ‡αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αžŸαŸ†αžŽαž½αžšαž‘αžΆαŸ†αž„αž˜αžΌαž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž‡αž»αŸ†αžœαž·αž‰αžαžΆαžšαžΆαž„αžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™ αž¬αž–αžΈαžš (αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ-αž˜αž“αž»αžŸαŸ’αžŸ-αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš) αž“αž·αž„αž‡αžΆαž˜αž½αž™αžŸαŸ†αžŽαž»αŸ†αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš (IsClosed, Canceled, Enabled, Status)αŸ” αžœαžΆαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαžŸαž˜αžšαž˜αŸ’αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ†αžšαžΌαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αŸ”

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž“αŸαŸ‡αžŸαž˜αž αŸαžαž»αž•αž›αž“αŸ…αž–αŸαž›αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžœαžΆαž›αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž€αŸ†αžŽαžαŸ‹αž™αŸ‰αžΆαž„αžŸαŸ†αžαžΆαž“αŸ‹αž“αžΌαžœαžŸαŸ†αžŽαž»αŸ†αžŠαŸ‚αž›αž”αžΆαž“αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž…αŸ†αž–αŸ„αŸ‡αžŸαŸ†αžŽαž½αžšαŸ”

αž§αž‘αžΆαž αžšαžŽαŸ αž™αžΎαž„αž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αŸ†αž“αž½αž“ 500000αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαž€αž˜αŸ’αž˜αž…αŸ†αž“αž½αž“ 2000 αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž›αž·αž”αž·αž€αŸ’αžšαž˜αžŠαŸ‚αž›αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αžΉαž„αž‡αž½αž™αžŸαž„αŸ’αž‚αŸ’αžšαŸ„αŸ‡αž™αžΎαž„αž–αžΈ INDEX αžŸαŸ’αž€αŸαž“ αž“αŸ…αž›αžΎαžαžΆαžšαžΆαž„αž’αŸ†αž˜αž½αž™ αž αžΎαž™αž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αžΆαž“αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸαžαžΆαž˜αžšαž™αŸˆαž›αž·αž”αž·αž€αŸ’αžšαž˜αžŠαŸ‚αž›αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž…αž„αŸ’αž€αŸ„αž˜αŸ”

αž•αž„αžŠαŸ‚αžš αž€αž„αŸ’αžœαŸ‡αž›αž·αž”αž·αž€αŸ’αžšαž˜αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž‡αž˜αŸ’αžšαž»αž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžœαž·αž—αžΆαž‚αž•αŸ‚αž“αž€αžΆαžšαžŸαŸ†αžŽαž½αžš αž¬αž”αŸ’αžšαž˜αžΌαž›αžŸαŸ’αžαž·αžαž·αž˜αžΎαž›αž”αŸ’αžšαž–αŸαž“αŸ’αž’ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž˜αŸ’αžšαžΎ 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 αž“αž·αž„ Canceled = 0 αž“αž·αž„ Enabled = 0 αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ†αž“αž½αžŸαžŠαŸ„αž™ αžŸαŸ’αžαžΆαž“αž—αžΆαž– = ្.

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž…αŸ†αž“αž½αž“αž‚αžαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ† αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαžαžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆαžαŸ’αž˜αžΈαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αŸ”

αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αžŠαŸ†αžŽαŸ„αŸ‡β€‹αžŸαŸ’αžšαžΆαž™β€‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž”αž‰αŸ’αž αžΆβ€‹αž€αžΆαžšβ€‹αž’αž“αž»αžœαžαŸ’αž αž–αŸ’αžšαŸ„αŸ‡β€‹αž™αžΎαž„β€‹αž…αžΌαž›β€‹αž”αŸ’αžšαžΎβ€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αžŠαŸ„αž™β€‹αž˜αž·αž“β€‹αž…αžΆαŸ†αž”αžΆαž…αŸ‹β€‹αž‚αžŽαž“αžΆαŸ”

3) αžŸαž˜αŸ’αž—αžΆαžšαŸˆαž“αŸƒαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–

αž‡αžΆαž’αž€αž»αžŸαž›αž“αŸ…αž€αŸ’αž“αž»αž„ αžŸαŸ†αžŽαž½αžš LINQ αžαžΆαžšαžΆαž„αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“ CTE αž“αž·αž„αž’αžαŸαžšαžαžΆαžšαžΆαž„αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž”αžΆαž“αž‘αŸαŸ”

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž˜αžΆαž“αžœαž·αž’αžΈαž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžšαžŽαžΈαž“αŸαŸ‡ - αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αŸ”

αž€αŸ’αžšαž»αž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒ (αž–αžΈαž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎ) IsClosed = 0 αž“αž·αž„ Canceled = 0 αž“αž·αž„ Enabled = 0 (αž¬αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž•αŸ’αžŸαŸαž„αž‘αŸ€αž) αž€αŸ’αž›αžΆαž™αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαž›αŸ’αž’αž˜αž½αž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αž½αž€αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜ αžŠαŸ„αž™αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαžΌαž…αŸ—αž–αžΈαžŸαŸ†αžŽαž»αŸ†αž’αŸ†αž˜αž½αž™αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αž€αžΆαžšαžšαžΉαžαžαŸ’αž”αž·αžαž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αŸ–

  1. αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸƒ subqueries, clauses αž“αž·αž€αŸ’αžαŸαž”αž”αž‘ αž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ†αž“αž½αžŸαžŠαŸ„αž™αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž…αžΌαž›αžšαž½αž˜
  2. αž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαž”αŸ’αžšαž™αŸ„αž‚αž”αžΆαž“αž‘αŸαŸ” αžŸαž αž‡αžΈαž–, αžŸαž αž‡αžΈαž–αž‘αžΆαŸ†αž„αž’αžŸαŸ‹, αž€αžšαžŽαžΈβ€‹αž›αžΎαž€αž›αŸ‚αž„, αž’αŸŠαž·αž“αž’αžΊαžŽαž·αž
  3. αž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž“αž·αž„αžƒαŸ’αž›αžΆαžαžΆαžšαžΆαž„αž”αžΆαž“αž‘αŸαŸ” αž‡αž˜αŸ’αžšαžΎαžŸ
  4. αž˜αž·αž“αž˜αžΆαž“αž›αž‘αŸ’αž’αž—αžΆαž–αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžœαžŠαŸ’αžαž‘αŸαŸ”
  5. αžœαžΆαž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αŸ’αž“αž»αž„αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž˜αž½αž™αž–αžΈαžαžΆαžšαžΆαž„αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆ

αžœαžΆαž‡αžΆαž€αžΆαžšαžŸαŸ†αžαžΆαž“αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αž…αžΆαŸ†αžαžΆαž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αž’αžΆαž…αžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αžαŸ‚αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αžœαžΆαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αž αŸ…αž‘αž·αžŠαŸ’αž‹αž—αžΆαž– αž›αž·αž”αž·αž€αŸ’αžšαž˜αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž’αžΆαž…αž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ αž αžΎαž™αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž–αž½αž€αžœαžΆαž±αŸ’αž™αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αž‡αžΆαž˜αž½αž™ (NOEXPAND).

αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž“αŸ…αž€αŸ’αž“αž»αž„ αžŸαŸ†αžŽαž½αžš LINQ αžœαžΆαž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž‡αŸ†αž“αž½αž™αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαžαŸ†αžŽαžΆαž„αž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αž - "αžšαž»αŸ†" αž“αŸƒαž‘αž˜αŸ’αžšαž„αŸ‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

CREATE VIEW ИМЯ_прСдставлСния AS SELECT * FROM MAT_VIEW WITH (NOEXPAND);

4) αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž»αžαž„αžΆαžšαžαžΆαžšαžΆαž„

αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ αžŸαŸ†αžŽαž½αžš LINQ αž”αŸ’αž›αž»αž€αž’αŸ†αž“αŸƒαžŸαŸ†αžŽαž½αžšαžšαž„ αž¬αž”αŸ’αž›αž»αž€αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžŠαŸ‚αž›αž˜αžΆαž“αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž”αž„αŸ’αž€αžΎαžαž‡αžΆαžŸαŸ†αžŽαž½αžšαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžŠαŸαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰ αž“αž·αž„αžŸαž˜αžŸαŸ’αžšαž”αž”αŸ†αž•αž»αžαŸ”

αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž»αžαž„αžΆαžšαžαžΆαžšαžΆαž„αž€αŸ’αž“αž»αž„ αžŸαŸ†αžŽαž½αžš LINQ:

  1. αžŸαž˜αžαŸ’αžαž—αžΆαž– αžŠαžΌαž…αž‡αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαž‘αž·αžŠαŸ’αž‹αž—αžΆαž– αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎ αž“αž·αž„αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‡αžΆαžœαžαŸ’αžαž»αž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž’αžΆαž…αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž”αž‰αŸ’αž…αžΌαž›αŸ–
    αž–αžΈαž˜αž»αžαž„αžΆαžš (@param1, @param2 ... )
    αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž‚αŸ†αžšαžΌαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž”αžαŸ‹αž”αŸ‚αž“αž”αžΆαž“αž’αžΆαž…αžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αŸ”
  2. αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž»αžαž„αžΆαžšαžαžΆαžšαžΆαž„ αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αžαŸ’αž›αžΆαŸ†αž„αžŠαžΌαž…αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž›αž·αž”αž·αž€αŸ’αžšαž˜αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžαžΆαž„αž›αžΎαž‘αŸαŸ–
    1. αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžαžΆαžšαžΆαž„αŸ–
      αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžš αž›αžΈαž“ αž’αŸ’αž“αž€β€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αž›αž·αž”αž·αž€αŸ’αžšαž˜β€‹αžŽαžΆβ€‹αžŠαŸ‚αž›β€‹αž‚αž½αžšβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ’αžšαžΎ αž“αž·αž„β€‹αž€αŸ†αžŽαžαŸ‹β€‹αž€αž˜αŸ’αžšαž·αžβ€‹αž―αž€αŸ„β€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αž–αŸαž›β€‹αžŸαž½αžšαŸ”
      αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž»αžαž„αžΆαžšαž˜αžΆαž“αžŸαž˜αžαŸ’αžαž—αžΆαž–αž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ”
      αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αž»αžαž„αžΆαžš αž’αŸ’αž“αž€αž’αžΆαž…αžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž“αžΌαžœαž•αŸ‚αž“αž€αžΆαžšαžŸαŸ†αžŽαž½αžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžαŸαžšαžŠαŸ„αž™αžŸαŸ’αž˜αžΎαž—αžΆαž– αžŠαŸ‚αž›αž…αŸ’αž”αžΆαž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ αž“αž·αž„αž€αž˜αŸ’αžšαž·αžαž—αžΆαž–αž―αž€αŸ„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αŸ”
    2. αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž»αžαž„αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™ αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜ αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αŸ–
      • αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž‚αŸ†αžšαžΌαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰ (αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž”αŸ’αžšαžΎαžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†)
      • αž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαžαžΆαžšαžΆαž„αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”
      • αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αžŸαž αž‡αžΈαž– ΠΈ αž“αž·αž€αŸ’αžαŸαž”αž”αž‘

  3. αž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž‡αžΌαž“ αž‡αž˜αŸ’αžšαžΎαžŸ αž˜αžΆαž“β€‹αž”αŸ’αžšαž™αŸ„αž‡αž“αŸβ€‹αžαŸ’αž›αžΆαŸ†αž„β€‹αžŽαžΆαžŸαŸ‹β€‹αž“αŸ…β€‹αž–αŸαž›β€‹αžŠαŸ‚αž›β€‹αž™αžΎαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž€αžΆαžšβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž•αŸ’αžαž›αŸ‹β€‹αž±αŸ’αž™β€‹αž“αžΌαžœβ€‹αž€αžΆαžšβ€‹αžαŸ’αžšαž½αžβ€‹αž–αž·αž“αž·αžαŸ’αž™β€‹αžŸαŸ’αžšαž”β€‹αž‚αŸ’αž“αžΆαŸ” OPTION(MAXDOP N)αž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž•αŸ‚αž“αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžŸαŸ†αžŽαž½αžšαŸ” αž§αž‘αžΆαž αžšαžŽαŸ:
    • αž’αŸ’αž“αž€αž’αžΆαž…αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžœαž·αž‰αžŠαŸ„αž™αž”αž„αŸ’αžαŸ†αž“αŸƒαž•αŸ‚αž“αž€αžΆαžšαžŸαŸ†αžŽαž½αžš αž‡αž˜αŸ’αžšαžΎαžŸ (αž”αŸ†αž–αŸαž‰αž‘αžΎαž„αžœαž·αž‰)
    • αž’αŸ’αž“αž€αž’αžΆαž…αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžαžΆαžαžΎαžαŸ’αžšαžΌαžœαž”αž„αŸ’αžαŸ†αž•αŸ‚αž“αž€αžΆαžšαžŸαŸ†αžŽαž½αžšαž±αŸ’αž™αž”αŸ’αžšαžΎαž›αŸ†αžŠαžΆαž”αŸ‹αž…αžΌαž›αžšαž½αž˜αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαž½αžš αž‡αž˜αŸ’αžšαžΎαžŸ (αž”αž„αŸ’αžαŸ†αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰)

    αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈ αž‡αž˜αŸ’αžšαžΎαžŸ αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆ αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

  4. αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αž“αŸ‚αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαžΌαž…αž…αž„αŸ’αž’αŸ€αž αž“αž·αž„αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αŸ†αž•αž»αžαŸ–
    αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžŸαŸ†αžŽαž»αŸ†αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ†αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž‘αŸ (αžŠαžΌαž…αž€αžšαžŽαžΈαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜) αžŠαŸ‚αž›αž’αŸ’αž“αž€αž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαžαŸ’αžšαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαžΆαž˜αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ”
    αž§αž‘αžΆαž αžšαžŽαŸαž˜αžΆαž“αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αžαž˜αŸ’αžšαž„ αž‘αžΈαž€αž“αŸ’αž›αŸ‚αž„ αžœαžΆαž›αž”αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ (a, ខ, αž‚).

    αžαžΆαž˜αž’αž˜αŸ’αž˜αžαžΆ αžŸαŸ†αžŽαžΎαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž˜αžΆαž“αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžαŸαžš a = 0 αž“αž·αž„ b = 0.

    αž‘αŸ„αŸ‡β€‹αž™αŸ‰αžΆαž„β€‹αžŽαžΆβ€‹αž€αžΆαžšβ€‹αžŸαŸ’αž“αžΎβ€‹αžŸαž»αŸ†β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αžœαžΆαž›β€‹αž“αŸαŸ‡β€‹ c αž’αžαŸαžšαž…αŸ’αžšαžΎαž“αž‘αŸ€αžαŸ”

    αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž›αž€αŸ’αžαžαžŽαŸ’αžŒ a = 0 αž“αž·αž„ b = 0 αžœαžΆαž–αž·αžαž‡αžΆαž‡αž½αž™αž™αžΎαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž›αž‘αŸ’αž’αž•αž›αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‘αŸ…αž‡αžΆαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžšαžΆαž”αŸ‹αž–αžΆαž“αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸ…αž›αžΎ с αž”αž„αŸ’αžšαž½αž˜β€‹αž€αžΆαžšβ€‹αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸβ€‹αž…αž»αŸ‡β€‹αžŠαž›αŸ‹β€‹αž˜αž½αž™β€‹αžšαž™β€‹αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαŸ”

    αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž˜αž»αžαž„αžΆαžšαžαžΆαžšαžΆαž„αž’αžΆαž…αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž›αŸ’αž’αž‡αžΆαž„αŸ”

    αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αž•αž„αžŠαŸ‚αžš αž˜αž»αžαž„αžΆαžšαžαžΆαžšαžΆαž„αž‚αžΊαž’αžΆαž…αž‘αžŸαŸ’αžŸαž“αŸαž‘αžΆαž™αž”αžΆαž“αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž˜αž»αž“ αž“αž·αž„αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž€αŸ’αž“αž»αž„αž–αŸαž›αžœαŸαž›αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αŸ”

αž§αž‘αž αžšαžŽαŸ

αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ„αž™αž”αŸ’αžšαžΎαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ†αžŽαž½αžšαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαŸ”

αž˜αžΆαž“αžŸαŸ†αžŽαžΎαž˜αž½αž™αŸ” αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ‚αž›αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαžαžΆαžšαžΆαž„αž‡αžΆαž…αŸ’αžšαžΎαž“ αž“αž·αž„αž”αŸ’αžšαžΎαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžαŸ‚αž˜αž½αž™ (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αžŠαŸ‚αž›αž‡αžΆαž‘αžΌαž‘αŸ…αž‚αžΊαž‡αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ‚αž›αž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αž›αžΎαž’αž“αž’αžΆαž“αžŠαŸ„αž™αž™αž»αžαŸ’αžαž·αž’αž˜αŸŒαŸ”

αž‚αŸ†αžšαžΌαž˜αž½αž™αž–αžΈαžŸαŸ†αžŽαž½αžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‚αžΊαž”αŸ’αžšαž αŸ‚αž›αž˜αž½αž™αž˜αŸ‰αžΊαž“αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαŸ”

αž”αž‰αŸ’αž αžΆαž…αž˜αŸ’αž”αž„αž‡αžΆαž˜αž½αž™αžŸαŸ†αžŽαž½αžšαž“αŸαŸ‡αž‚αžΊαžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž–αžΈαžŸαŸ†αžŽαž½αžšαžαžΆαž„αž€αŸ’αžšαŸ… αžŸαŸ†αžŽαž½αžšαžšαž„αžαžΆαž„αž€αŸ’αž“αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž›αžΎαž‘αž·αžŠαŸ’αž‹αž—αžΆαž– [OperativeQuestions] αžŠαŸ‚αž›αž‚αž½αžšαžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ [Email] = @p__linq__0 αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž›αž‘αŸ’αž’αž•αž› (αžαžΆαž˜αžšαž™αŸˆ αž“αž·αž€αŸ’αžαŸαž”αž”αž‘) αžšαž αžΌαžαžŠαž›αŸ‹αžšαžΆαž”αŸ‹αžšαž™αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαŸ”

αž αžΎαž™αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžαžΆ αžŸαŸ†αžŽαž½αžšαžšαž„αž‚αž½αžšαžαŸ‚αž‚αžŽαž“αžΆαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž˜αŸ’αžαž„αžŠαŸ„αž™ [Email] = @p__linq__0 αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž–αžΈαžšαž”αžΈαžšαž™αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ„αž™ Id αž‡αžΆαž˜αž½αž™αžŸαŸ†αžŽαž½αžš αž αžΎαž™αžŸαŸ†αžŽαž½αžšαž“αžΉαž„αž›αžΏαž“αŸ”

αžαžΆαž˜αž–αž·αž αž˜αžΆαž“αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αž“αŸƒαžαžΆαžšαžΆαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ– αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαžšαž†αŸ’αž›αžΎαž™αž†αŸ’αž›αž„αž“αŸƒαžŸαŸ†αžŽαž½αžšαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž‡αžΆαž˜αž½αž™ Id αž–αžΈ OperativeQuestions αž“αž·αž„αž€αžΆαžšαžαŸ’αžšαž„αžαžΆαž˜αž’αŸŠαžΈαž˜αŸ‚αž›αŸ”

αžαžΆαž˜αž€αžΆαžšαž–αž·αž αžŸαŸ†αžŽαžΎαž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ 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 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] αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”

αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž•αŸ’αž‰αžΎαž’αŸŠαžΈαž˜αŸ‚αž›αž‡αžΆαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž”αž‰αŸ’αž…αžΌαž› αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αžαžΆαžšαžΆαž„αžαž˜αŸ’αž›αŸƒαž˜αž€αžœαž·αž‰αŸ–

αžŸαŸ†αžŽαžΎαž›αŸαž 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 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 αŸ”

αž–αžΈαž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αž™αžΎαž„αž€αŸαž‘αž‘αž½αž›αž”αžΆαž“αŸ–

  1. αž€αžΆαžšαžαž™αž…αž»αŸ‡αž‡αžΆαž‘αžΌαž‘αŸ…αž“αŸƒαž”αž“αŸ’αž‘αž»αž€αž’αžΆαž“
  2. αž€αžΆαžšαžαž™αž…αž»αŸ‡αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αž“αŸƒαž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αžΆαžšαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹
  3. αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž–αŸαž›αžœαŸαž›αžΆαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αž‡αžΆαž˜αž’αŸ’αž™αž˜αž‘αŸ…αž‡αžΆαžαž˜αŸ’αž›αŸƒαžŠαŸ‚αž›αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž”αžΆαž“αŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž– αž“αž·αž„αž€αžΆαžšαž€αŸ‚αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαž–αŸ’αž‘αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ MS SQL αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžš αž›αžΈαž“ αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž’αžΆαž…αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αžΆαž“αŸ”

αž€αžΆαžšαž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹ αž“αž·αž„αž—αžΆαž–αžŸαŸŠαžΈαžŸαž„αŸ’αžœαžΆαž€αŸ‹αž‚αŸ’αž“αžΆαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž„αžΆαžšαž“αŸαŸ‡αŸ”

αž“αŸ…αžŠαžΎαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ–

  1. αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αžŸαŸ†αžŽαžΎαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš (αžαž˜αŸ’αž›αŸƒ αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ)
  2. αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡αŸ”
  3. αž–αž·αž“αž·αžαŸ’αž™αž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸƒαž›αž€αŸ’αžαžαžŽαŸ’αžŒαž…αžΌαž›αžšαž½αž˜αžšαžœαžΆαž„αžαžΆαžšαžΆαž„

αž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αžœαž·αž‰αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž”αž„αŸ’αž αžΆαž‰αž±αŸ’αž™αžƒαžΎαž‰:

  1. αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸƒαžŸαŸ†αžŽαžΎ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžαž˜αŸ’αžšαž„αžŸαŸ†αžŽαžΎαžŸαŸ†αžαžΆαž“αŸ‹
  2. αž€αžΆαžšαž’αŸ’αžœαžΎαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž”αŸ’αž›αž»αž€αžŸαŸ†αžŽαž½αžšαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆ αž“αž·αž„αž€αžΆαžšαžœαž·αž—αžΆαž‚αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαžŸαž–αŸ’αžœαž“αŸƒαž›αž€αŸ’αžαžαžŽαŸ’αžŒ
  3. αž“αŸ…αž€αŸ’αž“αž»αž„ SSMS ឬ GUI αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž˜αŸ’αžšαžΎ SQL αž’αŸ’αžœαžΎαž±αŸ’αž™αžαŸ’αž›αž½αž“αžœαžΆαž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„ αžŸαŸ†αžŽαž½αžš SQL (αž”αŸ‚αž„αž…αŸ‚αž€αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αž˜αŸ’αžšαž·αžαž˜αž’αŸ’αž™αž˜ αž”αž„αŸ’αž€αžΎαžαžŸαŸ†αžŽαž½αžšαž›αž‘αŸ’αž’αž•αž›αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž“αŸαŸ‡ (αž’αžΆαž…αž˜αžΆαž“αž…αŸ’αžšαžΎαž“))
  4. αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž…αž»αž„αž€αŸ’αžšαŸ„αž™ αžŠαŸ„αž™αž™αž€αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸƒαž›αž‘αŸ’αž’αž•αž› αžŸαŸ†αžŽαž½αžš SQL, αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹αž‘αžΎαž„αžœαž·αž‰ αžŸαŸ†αžŽαž½αžš LINQ

αž›αž‘αŸ’αž’αž•αž› αžŸαŸ†αžŽαž½αžš LINQ αž‚αž½αžšαžαŸ‚αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αŸαŸ‡αž”αž·αž‘αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž›αŸ’αž’αž”αŸ†αž•αž»αžαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ αžŸαŸ†αžŽαž½αžš SQL αž–αžΈαž…αŸ†αžŽαž»αž… 3 αŸ”

αž€αžΆαžšαžŠαžΉαž„αž‚αž»αžŽ

αž’αžšαž‚αž»αžŽαž…αŸ’αžšαžΎαž“αž…αŸ†αž–αŸ„αŸ‡αž˜αž·αžαŸ’αžαžšαž½αž˜αž€αžΆαžšαž„αžΆαžš αž€αžΆαžšαž„αžΆαžš ΠΈ alex_ozr αž–αžΈαž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“ Fortis αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αŸ†αž“αž½αž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αžŸαž˜αŸ’αž—αžΆαžšαŸˆαž“αŸαŸ‡αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹