2010-02-20 15 views
9

कर्मचारियों और अधीनस्थों के साथ इकाई की संग्रह की गणना कैसे करें - मैं एक कर्मचारी को एक प्रश्न में अधीनस्थों की गिनती के साथ लोड करना चाहता हूं।फ़्लेंट-निबर्ननेट

select e.name, (select count(*) from subordinate s where s.employee_id = e.id) NumberOfSubordinates 
from employee e 
group by e.name 
order by NumberOfSubordinates desc 
+0

बस एसक्यूएल के साथ एक अवलोकन, लेकिन ऐसा लगता है कि यह आवश्यक डेटा प्राप्त करने का यह एक बुरा तरीका है, उप-चयन तालिका में जॉइन के साथ प्रतिस्थापित नहीं किया जाना चाहिए, फिर उस पर एक गिनती (*) परिणामस्वरूप एक ही मूल्य होगा? ऐसा लगता है कि आप उपरोक्त करके एक अक्षम मार्ग लेने के लिए क्वेरी प्लानर को मजबूर कर रहे हैं। आपके लिए कोई भी प्रासंगिक प्रासंगिक नहीं है, लेकिन इस समय मैं यही देख रहा हूं। – Martin

उत्तर

15

तुम एक सूत्र के रूप में इस स्तंभ से मैप कर सकते:

public class Employee 
{ 
    public Name {get;set;} 
    public int NumberOfSubordinates {get;set;} 
} 

परिणामस्वरूप एसक्यूएल तरह दिखना चाहिए।

Map(x => x.NumberOfSubordinates) 
    .FormulaIs(@"select count(*) from subordinate where subordinate.employee_id = id"); 

एक अलग दृष्टिकोण एक व्युत्क्रम बैग के रूप में मातहत नक्शा और का उपयोग आलसी = "अतिरिक्त" के लिए है। इस मामले में Subordinates.Count SQL count(*) निष्पादित करेगा, हालांकि प्रारंभिक लोड के हिस्से के रूप में नहीं। यह दृष्टिकोण अभी तक फ्लुएंट में उपलब्ध नहीं हो सकता है।

+0

कृपया फ़्लुएंट में उपलब्ध होने पर उपयोग करें। –

+0

'ExtraLazyLoad' का उपयोग करें http://stackoverflow.com/a/5962775/265877 – Alex

+0

हालांकि यह काम करता है, मुझे नहीं लगता कि यह आपके कुशल खंड में एक सबक्वायरी चला रहे हैं, इसलिए यह प्रभावी नहीं है। क्या मुख्य प्रश्न में समूह के साथ बाल तालिका में शामिल होने का कोई तरीका है? – Alex