2011-03-31 7 views
6

मेरे पास एक एचक्यूएल क्वेरी है:समूह के साथ एचक्यूएल को क्विक ओवर में कैसे परिवर्तित करें?

select max(l.Num) from SomeTable l group by l.Type, l.Iteration 

मैं इसे क्वेरी/कन्वर्ट में कैसे परिवर्तित कर सकता हूं?

एक के बाद:

var grouped = session.QueryOver<SomeTable>() 
    .SelectList(l => l 
     .SelectGroup(x => x.Type) 
     .SelectGroup(x => x.Iteration) 
     .SelectMax(x => x.Num)); 

SQL उत्पन्न करेगा:

SELECT 
    MAX(l.Num), 
    l.Type, 
    l.Iteration 
FROM 
    SomeTable l 
GROUP BY 
    l.Type, 
    l.Iteration 

जो मैं अपेक्षा नहीं करता - मैं चयन में टाइप और इटरेशन नहीं चाहता हूं।

मैं select z from c where z IN (subquery) के लिए subquery के रूप में उस क्वेरी का उपयोग कर रहा हूँ।

+0

AFAIK अभी भी क्वेरीओवर/मानदंडों के साथ संभव नहीं है, https://nhibernate.jira.com/browse/NH-1426 – Firo

उत्तर

0

इस कथन से कोशिश, मैं उपनाम और UnderlyingCriteria

SomeTable someTb = null; 

var grouped = session.QueryOver<SomeTable>(() => someTb) 
       .SelectList(l => l.SelectMax(() => someTb.lnum)) 
       .UnderlyingCriteria.SetProjection(
            Projections.Group(() => someTb.Type) 
            ,Projections.Group(() => someTb.Iteration)) 
       .List(); 

मुझे आशा है कि यह उपयोगी है का उपयोग किया है।

+0

@ फेबर - धन्यवाद, लेकिन यह काम नहीं करेगा। अंतर्निहितक्रिटिया सिर्फ क्वेरीओवर में मानदंड क्वेरी का उपयोग करने में सक्षम बनाता है। इसके अतिरिक्त, आपके द्वारा प्रदान की गई क्वेरी करते हैं: 'टाइप प्रकार, पुनरावृत्ति समूह से पुनरावृत्ति समूह प्रकार, पुनरावृत्ति' - अधिकतम मूल्य का चयन करने वाला ईवेंट नहीं है। – Gutek

संबंधित मुद्दे