2011-10-18 12 views
5

से आइटम्स का सबसेट कैसे निकालें I मेरे पास एक इकाई ढांचा EntityCollection है।एंटिटी फ्रेमवर्क संग्रह

मुझे डेटाबेस से क्लॉज दिए गए सभी आइटमों को हटाने की आवश्यकता है।

// Perform the deletes 
foreach (var deleteReq in order.Requirements.Where(x=>!orderContract.Requirements.Any(y=>y.RequirementId==x.RequirementId))) 
{ 
    order.Requirements.Remove(deleteReq); 
} 

मूल रूप से मैं order.Requirements संग्रह है कि orderContract.Requirements संग्रह (एक आईडी पर मेल खाता है) में नहीं है से कुछ भी दूर करने के लिए कोशिश कर रहा हूँ: यह मेरे मौजूदा कोड है।

जैसा कि आप अनुमान लगा सकते हैं, यह कोड फेंकता है और अपवाद इसलिए है क्योंकि मैं संग्रह को संशोधित कर रहा हूं।

आम तौर पर मैं केवल RemoveAll() का उपयोग करता हूं लेकिन EntityCollection उस विधि का समर्थन नहीं करता है।

तो ... मैं उन सभी रिकॉर्ड्स को कैसे हटा सकता हूं जिनकी मुझे आवश्यकता है?

+0

क्यों आप सूची में हटाने योग्य आइटम एकत्र नहीं कर सकते? संग्रह का आकार बड़ा है? –

उत्तर

11

मैं एक अलग सूची बनाई जाएगी और यह काम किया है लगता है: जब मैं order.Requirements सूची से आइटम को हटा दें, यह सूची है कि मैं बार-बार दोहराना हूँ प्रभावित कर रहा है

// Perform the deletes 
var reqsToDelete = order.Requirements.Where(x=>!orderContract.Requirements.Any(y=>y.RequirementId==x.RequirementId)).ToList(); 
foreach (var deleteReq in reqsToDelete) 
{ 
    order.Requirements.Remove(deleteReq); 
} 

इस तरह से,।

6

उन सभी आवश्यक संस्थाओं को एकत्रित करें जिन्हें आप सूची में हटाना चाहते हैं।

फिर ऑर्डर के बजाए आवश्यकताएँ इकाई संग्रह से उनमें से प्रत्येक को हटा दें। आवश्यकताएं।

+0

हां, उस स्थान पर जहां मैं हटाना कर रहा हूं, आवश्यकताएँ इकाई संग्रह प्राप्त करना बहुत कठिन होगा। (मैं एक ऑटोमैपर आईटीइप कनवर्टर में हूं।) – Vaccano

+1

कम से कम, आप फोरैच लूप के भीतर हटाने में सक्षम नहीं होंगे, इसे सूची में एकत्र करने का प्रयास करें। फिर लूप के बाहर इसे प्रत्येक मैन्युअल रूप से हटाने का प्रयास करें। – Birey

1

EF6 से पहले, बेहतर प्रदर्शन और क्लीनर एपीआई

var deleteQuery = order 
    .Requirements 
    .Where(x=> !orderContract.Requirements.Any(y=>y.RequirementId == x.RequirementId)); 

order.Requirements.RemoveRange(deleteQuery); 

के लिए एक RemoveRange विधि है अब, एफई अभ्यस्त प्रत्येक आइटम निकालने से पहले, लोड के रूप में इसे स्वीकार कर लिया जवाब में एक मामला है।

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