मुझे विश्वास नहीं है कि आप इसे प्राप्त करने में सक्षम होंगे। यद्यपि आप select new { c.Name, c.Population }
करते हैं ऐसा लगता है कि आप वास्तव में एक कक्षा नहीं बना रहे हैं। यदि आप परावर्तक या कच्चे आईएल में संकलित आउटपुट पर एक नज़र डालते हैं तो आप इसे देख पाएंगे।
आप एक वर्ग है जो कुछ इस तरह दिखेगा होगा:
(के बाद से एक संपत्ति वास्तव में वैसे भी सेट सिर्फ एक
get_Name()
और
set_Name(name)
विधि है, ठीक है, मैं इसे एक स्पर्श साफ)
[CompilerGenerated]
private class <>c__Class {
public string Name { get; set; }
public int Population { get; set; }
}
जो आप करने की कोशिश कर रहे हैं वह उचित गतिशील वर्ग निर्माण है, जो कुछ भी उपलब्ध नहीं होगा जब तक कि .NET 4.0 बाहर नहीं आ जाता है (और तब भी मुझे सच में यकीन नहीं है कि यह आपके इच्छित चीजों को प्राप्त करने में सक्षम होगा)।
आप सबसे अच्छा समाधान अलग गुमनाम वर्गों को परिभाषित करने के लिए और उसके बाद निर्धारित करने के लिए जो एक बनाने के लिए, और यह बनाने के लिए वस्तु System.Linq.Expressions.NewExpression
उपयोग कर सकते हैं तार्किक जांच के कुछ प्रकार है किया जाएगा रहे हैं।
लेकिन, यदि आप अंतर्निहित LINQ प्रदाता के बारे में वास्तव में कठिन हो रहे हैं, तो यह संभवतः (सिद्धांत में कम से कम) संभव हो सकता है। यदि आप अपने स्वयं के LINQ प्रदाता लिख रहे हैं तो आप यह पता लगा सकते हैं कि वर्तमान में पारदर्शी अभिव्यक्ति एक चयन है या नहीं, तो आप CompilerGenerated
कक्षा निर्धारित करते हैं, जो इसके निर्माता के लिए प्रतिबिंबित करते हैं और बनाते हैं।
Defiantly एक साधारण काम नहीं है, लेकिन यह होगा कि LINQ से SQL, LINQ से XML, आदि सभी ऐसा करते हैं।
स्रोत
2009-03-03 12:25:07
आप कोड है कि आप अब तक लेकर आए हैं पोस्ट कर सकते हैं? – Andy