2012-01-23 10 views
6

मेरे पास दो एरे हैं idxListResponse & _index दोनों जिनमें से एक ही संरचना है।सी # linq - सरणी से तत्व प्राप्त करें जो एक अलग सरणी में मौजूद नहीं है

इन सरणियों से प्रत्येक विभिन्न गुणों के साथ कई तत्वों के एक बच्चे सरणी इस सरणी के प्रत्येक तत्व indexdata

कहा जाता है गुण के एक नंबर एक और सरणी datafield कहा जाता है, जिनमें से एक है, जिनमें से एक में शामिल है। इसमें कई महत्वपूर्ण मूल्य जोड़ी गुण हैं।

तो संक्षेप में मेरे पास 3 अलग-अलग सरणी का पदानुक्रम है।

मैं पदानुक्रम का पहला स्तर प्राप्त करना चाहता हूं + दूसरे स्तर के सभी तत्व जहां तीसरे स्तर के आइटम मेल नहीं खाते हैं, यानी उन वस्तुओं को केवल दूसरे स्तर से बाहर करें जहां तीसरे स्तर के आइटम एक मैच हैं ।

मैंने इस कई अलग-अलग तरीकों से संपर्क करने की कोशिश की है लेकिन अब तक मुझे कहीं भी नहीं मिल रहा है, क्या कोई मदद कर सकता है।

FYI करें - यहाँ मेरा नवीनतम प्रयास है

var q = idxListResponse.Index.Where(a => 
    a.IndexData.All(b => 
     b.DataField.All(c => 
      _index.Index.Where(z => 
       z.IndexData.All(y => y.DataField.Contains(c.name)) 
      ) 
     ) 
    ) 
); 

उत्तर

23

Except कि ऐसा करने का एक अच्छा तरीका है:

var items = source1.Except(source2); 

source2 में उन लोगों के छोड़कर source1में सभी आइटम लौट आते हैं।

के बाद से अपने संग्रह विभिन्न प्रकार दिखाई देते हैं, आप की तरह कुछ करना होगा:

source1.Except(source2.Select(s => /* selector here */)) 

या आप IEqualityComparer का अपना स्वयं का कार्यान्वयन बना सकते हैं और उपयोग करने वाले दो अलग अलग प्रकार की तुलना करने के सकता है।

+0

धन्यवाद लेकिन यह काम नहीं कर सकता है। मुद्दा यह है कि यदि 3 सरणी मैचों में किसी तत्व के गुणों में से 1 तब घटित हो रहा है। मुझे हटाए जाने से पहले संबंधित प्रविष्टि से मेल खाने के लिए तीसरे सरणी में प्रत्येक तत्व के लिए सभी गुणों की आवश्यकता है – Johnv2020

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