मैं एक एनएचबीर्नेट मानदंड लिख रहा हूं जो डेटा समर्थन पेजिंग का चयन करता है। मैं उपलब्ध पंक्तियों की कुल संख्या को पकड़ने के लिए, SQL Server 2005 (+) से COUNT(*) OVER()
अभिव्यक्ति का उपयोग कर रहा हूं, suggested के रूप में Ayende Rahien द्वारा। मुझे उस संख्या की गणना करने में सक्षम होने की आवश्यकता है जो कुल मिलाकर कितने पेज हैं। इस समाधान की सुंदरता यह है कि मुझे पंक्ति गणना को पकड़ने के लिए दूसरी क्वेरी निष्पादित करने की आवश्यकता नहीं है।एनएचबीर्नेट मानदंडों के लिए प्रक्षेपण जोड़ना इसे डिफ़ॉल्ट इकाई चयन करने से रोकता है
हालांकि, मैं एक कार्य मानदंड लिखने के लिए प्रबंधन नहीं कर सकता (Ayende केवल एक एचक्यूएल क्वेरी प्रदान करता है)।
यहां एक SQL क्वेरी है जो दिखाती है कि मैं क्या चाहता हूं और यह ठीक काम करता है। ध्यान दें कि मैं जानबूझकर वास्तविक पेजिंग तर्क बाहर छोड़ दिया समस्या पर ध्यान केंद्रित करने के लिए:
select
item, rowcount()
from
Item item
ध्यान दें कि rowcount()
समारोह एक कस्टम NHibernate बोली में पंजीकृत है और COUNT(*) OVER()
पर ले कर जाता है:
SELECT Items.*, COUNT(*) OVER() AS rowcount
FROM Items
यहाँ HQL है एसक्यूएल में
एक आवश्यकता यह है कि क्वेरी एक मानदंड का उपयोग करके व्यक्त की जाती है। दुर्भाग्य से, मैं कैसे यह सही पाने के लिए पता नहीं:
var query = Session
.CreateCriteria<Item>("item")
.SetProjection(
Projections.SqlFunction("rowcount", NHibernateUtil.Int32));
जब भी मैं एक प्रक्षेपण जोड़ने के लिए, NHibernate का चयन नहीं करता item
(जैसे एक प्रक्षेपण के बिना यह होगा), बस rowcount()
जबकि मैं वास्तव में दोनों की जरूरत है। इसके अलावा, मैं पूरी तरह से item
प्रोजेक्ट प्रतीत नहीं कर सकता, केवल यह गुण है और मैं वास्तव में उन सभी को सूचीबद्ध नहीं करना चाहता हूं।
मुझे उम्मीद है कि किसी के पास इसका समाधान होगा। फिर भी धन्यवाद।
का उपयोग CreateMultiCriteria दो अलग-अलग एसक्यूएल प्रश्नों में परिणाम होगा उत्पन्न किया जा करने के लिए। हालांकि उन्हें एक बैच में निष्पादित किया जाएगा, फिर भी यह केवल एक ही क्वेरी निष्पादित करने के रूप में उतना ही कुशल नहीं होगा। मैं 'चयन *, COUNT (*) ओवर() आइटम से एएस पंक्ति गणना' चाहता हूं, आइटम से नहीं चुनें; CreateMultiCriteria परिदृश्य के रूप में आइटम चुनें (*) आइटम से एएस पंक्ति गणना। –