इकाई की रूपरेखा में, यदि मैं निम्न करें:क्या एक IQueryable ऑब्जेक्ट के एकाधिक मूल्यांकन डेटाबेस को कई बार हिट करते हैं?
var count = myIQueryable.Count();
var list = myIQueryable.ToList();
कि दो बार डाटाबेस हिट करता है? या सिर्फ एक बार?
इकाई की रूपरेखा में, यदि मैं निम्न करें:क्या एक IQueryable ऑब्जेक्ट के एकाधिक मूल्यांकन डेटाबेस को कई बार हिट करते हैं?
var count = myIQueryable.Count();
var list = myIQueryable.ToList();
कि दो बार डाटाबेस हिट करता है? या सिर्फ एक बार?
आदेश में प्रभावी रूप प्रविष्टियों की संख्या गिनी करने के लिए, ढांचे क्वेरी का मूल्यांकन करने, इस प्रकार डाटाबेस मार की जरूरत है। हालांकि, क्योंकि क्वेरी() और ToList() के बीच क्वेरी बदल सकती है, इसे फिर से मूल्यांकन करना होगा। निम्नलिखित पर विचार करें:
var myIQueryable = my.db<SomeModel>(); // IQueryable<SomeModel>
var countQuery = myIQueryable.Count(); // 10
MakeAdditions(myIQueryable, 10); // adds 10 items
var list = myIQueryable.ToList(); // List<SomeModel> count=20
MakeAdditions(myIQueryable, 10);
var countList = list.Count(); // still 20, List never changed
एक और तरीका रखें, IQueryable के खिलाफ सभी कॉल अभी भी इसके प्रश्नों के अनुसार चल रहे हैं। एक सूची में एक प्रश्न पर कब्जा करने के बाद, आप विशेष रूप से अपने इन-स्मृति सूची, परिवर्तन है कि IQueryable के डेटा स्रोत होने की स्वतंत्र के साथ काम कर रहे हैं।
हाँ, यह डेटाबेस में दो बार, के रूप में दोनों Count
और ToList
बेसब्री से मूल्यांकन किया जाता है मारा है। आप सिर्फ एक बार इसे का उपयोग करना चाहते हैं, निम्न कार्य करें:
var list = myIQueryable.ToList();
var count = list.Count;
तो पर थोड़ा और अधिक विस्तार किया है, भले ही आप एक ही का मूल्यांकन IQueryable पर अतिरिक्त कर रहे हैं, के लिए एक फिल्टर जोड़ने उदाहरण के लिए, IQueryable अपने पिछले परिणाम का उपयोग नहीं करता है? – dmorganb
वास्तव में, IQueryable की प्रकृति क्वेरी जब यह कहा जाता है evaulate है। यदि आप एक पूर्व मूल्यांकन का उपयोग करना चाहते हैं, तो आप = पहले यह कब्जा करना होगा। 'var सूची myIQueryable। ToList(); MakeAdditions(); वर संख्या = list.Count(); ' – max
आप पेजिंग नहीं कर रहे हैं, साथ ही बस ToList साथ परिणाम मिल सकते हैं, तो इसकी गणना संपत्ति ताकि आप डेटाबेस दो बार मार नहीं कर रहे हैं का उपयोग करें । दूसरी ओर, यदि आप डेटा पेजिंग रहे हैं, तो अपने ToList गणना की तुलना में कम परिणाम प्राप्त हो जाएगा, ताकि आप वें पर दो अलग-अलग हिट बनाने के लिए होगा ई डेटाबेस। मुझे आश्चर्य है कि, तथापि, वहाँ अगर गणना तो बुला (पृष्ठांकित) क्वेरी चलाने, बनाम (पृष्ठांकित) क्वेरी चलाने तो गणना को फोन करके किसी भी प्रदर्शन वृद्धि हुई है। क्या किसी भी तरह से कैश के परिणाम या योजनाएं उपयोगी होंगी? – Triynko