का उपयोग कर रहा प्रकार का एक शब्दकोश है बनाना:एक और शब्दकोश से एक शब्दकोश LINQ
IDictionary<foo, IEnumerable<bar>> my_dictionary
बार वर्ग इस तरह दिखता है:
class bar
{
public bool IsValid {get; set;}
}
कैसे मैं केवल उन वस्तुओं के साथ एक और शब्दकोश बना सकते हैं कि IsValid = सच है।
मैं इस कोशिश की:
my_dictionary.ToDictionary(p=> p.Key,
p=> p.Value.Where (x => x.IsValid));
ऊपर कोड के साथ समस्या यह खाली गणनीय के साथ एक चाबी बनाता है कि, अगर सब उस कुंजी के लिए तत्वों अगर है = झूठे थे है।
उदाहरण के लिए:
my_dictionar[foo1] = new List<bar> { new bar {IsValid = false}, new bar {IsValid = false}, new bar {IsValid = false}};
my_dictionary[foo2] = new List<bar> {new bar {IsValid = true} , new bar{IsValid = false};
var new_dict = my_dictionary.ToDictionary(p=> p.Key,
p=> p.Value.Where (x => x.IsValid));
// Expected new_dict should contain only foo2 with a list of 1 bar item.
// actual is a new_dict with foo1 with 0 items, and foo2 with 1 item.
मैं अपने की उम्मीद कैसे मिलता है।
+1 ओ पी का उपयोग कर संग्रह फिल्टर करने के लिए की जरूरत है बनाने के 'Where' कॉल करने से पहले' –
सही ToDictionary'। धन्यवाद – Bitmask
यह पहला है जहां क्लॉज x =>! X.IsValid से छुटकारा पाने के लिए पर्याप्त नहीं है? क्या आप सिर्फ लिख नहीं सकते हैं। टोपी (पी => पी। केई, पी => पी। वैल्यू), चूंकि टोनी को कॉल करने से पहले खंड पहले ही फ़िल्टरिंग लागू कर रहा है? – Prokurors