මීට පෙර බොහෝ දේ පවසා ඇත, නමුත් මුල් වලට ආපසු, වඩාත් තාක්ෂණික ආකාරයකින්:
IEnumerable
ඔබට ගණනය කළ හැකි මතකයේ ඇති වස්තු එකතුවකි - මතකයේ ඇති අනුක්රමයක් මඟින් එය හරහා නැවත ගමන් කිරීමට ඉඩ සලසයි ( foreach
ලූපය තුළ එය පහසු කරවයි , නමුත් ඔබට IEnumerator
පමණක් යා හැකි වුවද ). ඒවා මතකයේ රැඳේ.
IQueryable
ප්රකාශන ගසක් වන අතර එය යම් අවස්ථාවක දී අවසාන ප්රති .ලය ගණනය කිරීමේ හැකියාව ඇති වෙනත් දෙයකට පරිවර්තනය කරනු ඇත . මම හිතන්නේ මෙය බොහෝ මිනිසුන් ව්යාකූල කරයි.
ඔවුන්ට පැහැදිලිවම විවිධ අර්ථයන් ඇත.
IQueryable
LINQ සමස්ථ ශ්රිත (එකතුව, ගණන්, ආදිය) හෝ ටොලිස්ට් [අරාව, ශබ්ද කෝෂය, වැනි නිකුතු API කැඳවූ විගසම යටින් පවතින විමසුම් සැපයුම්කරු විසින් ප්රකාශන ගසක් (විමසුමක්, සරලව) පරිවර්තනය කරනු ලැබේ. ..]. හා IQueryable
ක්රියාත්මක ද විරුද්ධ IEnumerable
, IEnumerable<T>
එසේ බව ඔවුන් විමසුම නියෝජනය නම් ඒ විමසුම ප්රතිඵලයක් ශාඛාවයි ගත හැක. එයින් අදහස් වන්නේ IQueryable යනු විමසුම් පමණක් විය යුතු නැති බවයි. නිවැරදි පදය නම් ඒවා ප්රකාශන ගස් ය .
දැන් එම ප්රකාශන ක්රියාත්මක කරන්නේ කෙසේද සහ ඒවා දෙසට හැරෙන්නේ ඊනියා විමසුම් සපයන්නන් (ප්රකාශන ක්රියාකරුවන් අපට ඒවා ගැන සිතිය හැකිය).
ආයතන රාමු ලෝකයේ (අද්භූත යටින් පවතින දත්ත ප්රභව සැපයුම්කරු හෝ විමසුම් සැපයුම්කරු) IQueryable
ප්රකාශන දේශීය T-SQL විමසුම් වලට පරිවර්තනය කරනු ලැබේ . Nhibernate
ඔවුන් හා සමාන දේවල් කරයි. LINQ හි ඉතා හොඳින් විස්තර කර ඇති සංකල්ප අනුගමනය කරමින් ඔබට ඔබේම එකක් ලිවිය හැකිය : නිදසුනක් ලෙස, IQueryable සැපයුම්කරුගේ සම්බන්ධතාවයක් ගොඩ නැගීම , ඔබේ නිෂ්පාදන ගබඩා සැපයුම්කරුගේ සේවාව සඳහා අභිරුචි විමසුම් API ලබා ගැනීමට ඔබට අවශ්ය විය හැකිය.
එබැවින් මූලික වශයෙන්, IQueryable
වස්තූන් අප විසින් පැහැදිලිව මුදා හරින තෙක් ඒවා SQL හෝ වෙනත් ඕනෑම දෙයකට නැවත ලිවීමට හා ඉදිරියට සැකසීම සඳහා ක්රියාත්මක කිරීමේ දාමය යවන තෙක් පද්ධතියට කියනු ලැබේ.
කිරීමට මෙන් ටිකක් ප්රමාද ක්රියාත්මක එය තියෙන්නේ LINQ
මතකයේ ප්රකාශනය ගසක් යෝජනා ක්රමය දක්වා පැවැත්වීමට හා සමහර ඒපීඅයි වූ අනුපිළිවෙල (එම සංඛ්යාව, ToList, ආදිය) එරෙහිව කැඳවා ඇත සෑම අවස්ථාවකදීම, එකම ඉල්ලීම මත ක්රියාත්මක බවට එය යැවීමට ලක්ෂණය.
දෙකෙහිම නිසි භාවිතය දැඩි ලෙස රඳා පවතින්නේ ඔබ විශේෂිත අවස්ථාව සඳහා මුහුණ දෙන කාර්යයන් මත ය. සුප්රසිද්ධ නිධිය රටාව සඳහා මම පෞද්ගලිකව නැවත පැමිණීම තෝරා ගනිමි IList
, එය IEnumerable
ලැයිස්තු ඉක්මවා ඇත (දර්ශක සහ ඒ හා සමාන). එබැවින් IQueryable
කේතයේ වෙනත් ඕනෑම තැනක සහ IEnumerable තුළ පමණක් භාවිතා කිරීම මගේ අවවාදයයි. බව testability පිලිබඳව උත්සුකතාවන් කියන්නේ නැහැ IQueryable
විරාම පහළ සහ නටඹුන් අවධානය වෙන් මූලධර්මය. ඔබ ගබඩාවලින් ප්රකාශනයක් ආපසු ලබා දෙන්නේ නම් පාරිභෝගිකයින්ට ඔවුන් කැමති පරිදි ස්ථර ස්ථරය සමඟ සෙල්ලම් කළ හැකිය.
අවුලට ටිකක් එකතු කිරීම :) (අදහස් දැක්වීමේ සාකච්ඡාවකින්)) ඒවා කිසිවක් මතකයේ ඇති වස්තූන් නොවේ, මන්ද ඒවා සැබෑ වර්ග නොවන බැවින් ඒවා වර්ගයක සලකුණු වේ - ඔබට ගැඹුරට යාමට අවශ්ය නම්. නමුත් එය හැඟීමක් (සහ පවා ඒකයි කරයි MSDN හි එය මේ ආකාරයෙන් තබා) ප්රකාශනය ගස් IQueryables බැවින්ද දී මතක ලෙස ගෙවී IEnumerables ගැන හිතන්න. කාරණය වන්නේ IQueryable අතුරුමුහුණත IEnumerable අතුරුමුහුණත උරුම කර ගැනීමයි, එවිට එය විමසුමක් නියෝජනය කරන්නේ නම්, එම විමසුමේ ප්රති results ල ගණනය කළ හැකිය. ගණනය කිරීම මඟින් IQueryable වස්තුවක් හා සම්බන්ධ ප්රකාශන ගස ක්රියාත්මක කිරීමට හේතු වේ. එබැවින්, ඇත්ත වශයෙන්ම, මතකයේ ඇති වස්තුවක් නොමැතිව ඔබට සැබවින්ම IEnumerable සාමාජිකයෙකු ඇමතිය නොහැක. ඔබ එසේ කළහොත් එය හිස් නොවේ නම් එය කෙසේ හෝ එහි ඇතුල් වනු ඇත. IQueryables යනු විමසීම් මිස දත්ත නොවේ.