को देखते हुए एकएक सदस्य प्रवेश लैम्ब्डा अभिव्यक्ति को देखते हुए यह एक विशिष्ट स्ट्रिंग प्रतिनिधित्व करने के लिए परिवर्तित पूर्ण पहुँच पथ
Expression<Func<T, object>>
(जैसे एक्स => x.Prop1.SubProp), मैं एक स्ट्रिंग बनाना चाहते हैं "Prop1 साथ .SubProp "आवश्यक के रूप में गहराई के लिए।
एक भी पहुंच (जैसे एक्स => x.Prop1) के मामले में, मैं आसानी से के साथ ऐसा कर सकते हैं:
MemberExpression body = (expression.Body.NodeType == ExpressionType.Convert) ? (MemberExpression)((UnaryExpression)expression.Body).Operand : (MemberExpression)expression.Body;
return body.Member.Name;
हालांकि, अगर वहाँ गहरा नेस्टिंग, उदा x => x.Prop1.SubProp1, यह केवल सबसे गहरा घोंसला वाला नाम मिलता है, उदा। "Prop1.SubProp1" के बजाय "SubProp1"
क्या लैम्बडा अभिव्यक्ति के पूर्ण संपत्ति पथ तक पहुंचने के लिए वैसे भी है?
MemberExpression.Expression पर एक नज़र डालें। आप शायद उस अभिव्यक्ति के पेड़ को तब तक चलने के लिए उपयोग कर सकते हैं जब तक कि वे सभी सदस्य एक्स्प्रेशन उदाहरण हैं। –
मुझे "स्वीकृत उत्तर" चुनने में कठिनाई थी, दोनों अच्छे थे। कोई भी इस सवाल को देखकर, मैं ल्यूकएच और दान ताओ दोनों के उत्तरों को देखने की सलाह देता हूं। – Nathan
संभावित डुप्लिकेट [एक स्ट्रिंग के रूप में संपत्ति प्राप्त करें, एक अभिव्यक्ति से>] (http://stackoverflow.com/questions/2789504/get-the-property-as-a-string- से-ए-एक्सप्रेशनफंक्टमोडेल-टप्रोपर्टी) –
nawfal