2009-07-02 8 views
14

आप किसी ऑब्जेक्ट की बजाय क्वेरी से एक कॉलम वापस कैसे प्राप्त कर सकते हैं?किसी इकाई से एकल कॉलम प्राप्त करना

मैं कुछ इस तरह कर सकता है पूरी वस्तु प्राप्त करने के लिए, लेकिन सभी मैं चाहता हूँ नाम है:

IList<Tribble> tribbles = session.CreateCriteria(typeof(Tribble)).List<Tribble>(); 
IList<string> names = new List<string>(); 
foreach (Tribble t in tribbles) { 
    names.Add(t.Name); 
} 

मैं अतिरिक्त मापदंड निर्दिष्ट करने में सक्षम होना चाहते हैं, तो यह संभव है बस कुछ बाहर करने के लिए कॉलम पुनर्प्राप्त होने से?

उत्तर

23

यहाँ समाधान मैं अंततः का उपयोग कर समाप्त हो गया है:

ICriteria c = session.CreateCriteria(typeof(Tribble)); 
c.SetProjection(Projections.ProjectionList().Add(Projections.Property("Name"))); 
IList<string> names = c.List<string>(); 

मैं this old StackOverflow question से इस विचार आया।

-2

आप आमतौर पर नहीं करते हैं। आंशिक रूप से आबादी वाले व्यापारिक वस्तु को शायद ही कभी समझ में आता है।

आप ऐसा क्यों करना चाहते हैं?

+0

मैं वर्गों के दर्जनों के साथ पूरे कार्यक्रम के दौरान यह उपयोग कर रहा हूँ, यह केवल समय मैंने है ऐसा करने की आवश्यकता है और इस परिस्थिति में यह आवश्यक है। –

+0

क्या आप आगे बता सकते हैं कि उपयोग केस क्या है? –

+0

क्या यह हर समय नहीं होता है? उदाहरण के लिए, मैं एक कर्मचारी के विवरण और इसके कार्यालय का नाम प्रदर्शित करना चाहता हूं। मुझे पूरे कार्यालय की जरूरत नहीं है, बस नाम। – cbp

2

स्ट्रिंग द्वारा क्वेरी निष्पादित करने के बारे में क्या?

IList<string> names = session.CreateQuery("select name from Tribbles").List<string>(); 
+1

तकनीकी रूप से, आपको वास्तव में यह करना होगा: IList नाम = session.CreateQuery ("ट्रिबल्स टी से t.name का चयन करें")। (); –

2

आप कुछ इस तरह कर सकते हैं:

IQuery query = dao.GetQuery(@"SELECT u.Id 
           FROM UserImpl u 
           WHERE u.UserName = :username"); 
       query.SetParameter("username", username); 
return (long)query.UniqueResult(); 
7

लगभग पांच साल बाद ..., यह आप NHibernate.Linq का उपयोग कर क्या कर सकते है:

IList<string> names = session.Query<Tribble>().Select(t => t.Name).ToList() 
संबंधित मुद्दे