2010-08-01 22 views
5

लौटने पर मुझे गतिशील रूप से बनाए गए शब्दकोश का एक आईनेमरेबल वापस करने की आवश्यकता है।लिंक एक आईनेमरेबल <शब्दकोश <स्ट्रिंग, स्ट्रिंग >>

छद्म कोड:

var x = from u in Users 

select new dictionary<string, string>{ 
    Add("Name",u.Name), 
    Add("LastName",u.LastName) 
} 

मैं मैं सच में तुम्हारी मदद की सराहना करते हैं इसके बाद के संस्करण है, लेकिन कोई सफलता छद्म कोड उदाहरण प्राप्त करने के लिए कई तरह से कोशिश कर रहा है ...

+0

आप कृपया वर्णन कर सकते कि आप क्या कर रहे हैं? 'IEnumerable > 'थोड़ा अजीब लगता है, विशेष रूप से जब आपको सभी तत्वों को हार्डकोड करना होता है। – Kobi

उत्तर

7
var x = from u in Users 
     select new Dictionary<string, string> { 
      { "Name", u.Name }, 
      { "LastName", u.LastName } 
     }; 
+0

यह बात काम नहीं कर सका। इस अपवाद को फेंक दें अज्ञात अभिव्यक्ति नोड: ListInit मैंने शब्दकोश <स्ट्रिंग, स्ट्रिंग> और कोई सफलता के बाद() को जोड़ने और हटाने की कोशिश की ... कोई विचार ... – Tony

+0

@ टोनी, @mquander, उपयोगकर्ताओं में से आप से प्रयास करें।() '' उपयोगकर्ता 'के रूप में 'IQueryable' हो सकता है और यह संपूर्ण LINQ कथन को SQL स्क्रिप्ट में परिवर्तित करने का प्रयास कर रहा है। –

1

यह एक शब्दकोश का खराब उपयोग है - आप केवल इसे एक संपत्ति बैग के रूप में उपयोग कर रहे हैं, और उपयोगकर्ताओं के रूप में कई शब्दकोश बनाते हैं।
भाषा का एक बेहतर इस्तेमाल इन गुणों के साथ अपने स्वयं User वर्ग बनाने हो सकता है और है कि प्रयोग करेंगे:

public class User 
{ 
    public string Name { get; set; } 
    public string LastName { get; set; } 
} 

और क्वेरी:

var users = Users.Select(u => new User 
      { 
       Name = u.Name, 
       LastName = u.LastName 
      }); 

आप केवल संग्रह Whiting इस्तेमाल करेंगे तो आपके

var users = Users.Select(u => new { Name = u.Name, LastName = u.LastName }); 
+0

मैं पूरी तरह से समझता हूं कि इसका बहुत खराब उपयोग है, लेकिन मैं अपनी स्थिति के लिए बेहतर समाधान के साथ नहीं आ सकता। यह पूरा परिदृश्य है ... मैं ईमेल टेम्पलेट्स की एक श्रृंखला बना रहा हूं। मैं रेगेक्स पूर्व का उपयोग कर गतिशील रूप से कुछ ग्रंथों को प्रतिस्थापित करना चाहता हूं: "प्रिय [[नाम]]" -> बदलें ([[नाम]], शब्दकोश [नाम] ... बात यह है कि मेरे पास कई संस्थाएं हैं जिन्हें मैं डेटा एकत्र कर सकता हूं छद्म कोड केवल इकाई उपयोगकर्ता का उपयोग कर रहा है लेकिन मेरे पास ऐसे मामले हो सकते हैं जहां मैं उपयोगकर्ता, उपयोगकर्ता क्रेडिट, उपयोगकर्ता एड्रेस का उपयोग करता हूं ... इसलिए मैं केवल उन फ़ील्ड को वापस लौटना चाहता हूं जिन्हें मुझे अपने ईमेल टेम्पलेट में चाहिए। अज्ञात वर्ग मुझे प्रतिबिंब का उपयोग करने के लिए मजबूर करेगा .. – Tony

+0

बीटीडब्ल्यू, आपका उदाहरण एक आकर्षण की तरह काम करता है। धन्यवाद कोबी – Tony

+0

मैंने हाल ही में कुछ ऐसा किया था, और एक और जटिल समाधान था। अगर आपको एक ही टेम्पलेट पर अलग-अलग इकाइयों की आवश्यकता है तो क्या होगा? '"हैलो [[नाम]], आप' मैंने [[आइटमकाउंट]] आइटम $ [[आइटमप्रिस]] पर आदेश दिया है। कृपया Terms of Use देखें। "मेरे पास 'उपयोगकर्ता', 'ऑर्डर', आदि के साथ 'ऑर्डर कॉन्टेक्स्ट' वर्ग था, और यह उपयुक्त स्ट्रिंग के साथ टोकन को प्रतिस्थापित कर सकता है। यह प्रत्येक इकाई को एक शब्दकोश में बदलने से शायद बेहतर है। – Kobi

1

रूपांतरण विधि: विधि, एक और विकल्प एक अनाम वर्ग बनाने के लिए है

public Dictionary<string, string> ToPropertyDictionary(User theUser) 
{ 
    Dictionary<string, string> result = new Dictionary<string, string>(); 
    result.Add("Name", theUser.Name); 
    result.Add("LastName", theUser.Name); 
    return result; 
} 

द्वारा कहा जाता है:

IEnumerable<Dictionary<string, string>> x = 
    from u in Users.AsEnumerable() //ensure local execution by using AsEnumerable 
    select ToPropertyDictionary(u); 
+0

यहां एक विकल्प सभी इकाइयों के लिए एक आम इंटरफ़ेस होना है, और 'उपयोगकर्ता है। चयन करें (u => u.ToPropertyDictionary())' – Kobi

+0

यह बात काम नहीं कर सका। इस अपवाद को फेंक दें अज्ञात अभिव्यक्ति नोड: ListInit मैंने शब्दकोश के बाद जोड़ने और निकालने का प्रयास किया <) स्ट्रिंग, स्ट्रिंग> और कोई सफलता नहीं ... कोई विचार ... – Tony

+0

उपयोगकर्ता ... क्या यह एक स्थानीय संग्रह है? –

4

"पहचाने न जाने अभिव्यक्ति नोड" त्रुटि आप हो रही है क्योंकि LINQ एसक्यूएल को एसक्यूएल में शब्दकोश से संबंधित कोड चालू करने के लिए विफल हो रहा है है। आप AsEnumerable() का उपयोग करने के बजाय वस्तुओं को संकलक उपयोग LINQ बनाने के लिए कर सकते हैं:

var x = from u in Users.AsEnumerable() 
     select new Dictionary<string, string> { 
      { "Name", u.Name }, 
      { "LastName", u.LastName } 
     }; 
संबंधित मुद्दे