2011-08-31 10 views
13

ऐसा करने का सबसे अच्छा तरीका क्या है जहां PROPNAMET टाइप की कोई संपत्ति हो सकती है? इसे प्रतिबिंब के साथ बनाएं, या ऐसा करने का एक अच्छा LINQ तरीका है?LINQ सूची संपत्ति सरणी के लिए?

T[] vals = people.Select(x => x.PROPNAME).ToArray<T>(); 

यह सबसे अच्छा मैं अब तक मिल गया है है:

public T[] ConvertListCol<TFrom,T>(IEnumerable<TFrom> list, string col) 
    { 
     var typ = typeof (TFrom); 
     var props = typ.GetProperties(); 
     var prop = (from p in props where p.Name == col select p).FirstOrDefault(); 
     var ret = from o in list select prop.GetValue(o, null); 
     return ret.ToArray<T>(); 
    } 

बदले में एक त्रुटि मिल गया ... लेकिन करीब हो रही है। यह ठीक है, लेकिन मुझे उम्मीद से थोड़ा गड़बड़ है।

+0

एक सरणी के बाद आप कर रहे हैं 'लोगों' के संपत्ति के नामों का? –

+0

क्या आप कोड का एक पुन: प्रयोज्य टुकड़ा बनाने की कोशिश कर रहे हैं जहां आप किसी भी संपत्ति को निर्दिष्ट कर सकते हैं और स्ट्रिंग प्रस्तुतियों के सेट को वापस प्राप्त कर सकते हैं? – Tejs

+0

स्थिति यह है कि कई गुणों की एक बड़ी पॉको वस्तु है, और एक एपीआई एक समय में एक पंक्ति के बजाय उन्हें एक कॉलम देखना चाहेंगे। – sgtz

उत्तर

23

, यह स्वतः ही प्रकार उत्पन्न होगा एक गैर स्पष्ट वर प्रकार का उपयोग करने के लिए आप

var names = people.Select(x => x.PROPNAME).ToArray(); 
+0

आपको बहुत धन्यवाद जेलेवेट !!! –

7

प्रकार यदि आप वर कीवर्ड का उपयोग अनुमान लगाया जा जाएगा:

var names = people.Select(x => x.PROPNAME).ToArray(); 
+0

अच्छा! नाम किसी भी प्रकार का x होगा। xROPNAME –

+0

स्ट्रिंग के आधार पर PROPNAME का नाम बदलने का कोई गतिशील तरीका नहीं है। नई जानकारी "prop.GetValue (" जिसे मैंने हाल ही में संपादित किया है वहां देखें। यह एक जवाब है, हालांकि, यह वास्तव में वह कुशल नहीं है। – sgtz

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