2010-07-24 17 views
10

के बराबर होती है, तो मैंLINQ वस्तु सरणी से आइटम निकाल जहां संपत्ति के मूल्य

IEnumberable<Car> list 

है और मैं कार की संपत्ति के आधार पर इस सूची से कोई आइटम को निकालना चाहते

मैं की तरह कुछ हैं:

list.RemoveWhere(r=>r.Year > 2000) 

ऐसा कुछ ऐसा मौजूद है?

मैं इस पर कर रहा हूँ और अधिक तो मैं केवल एक आइटम को हटाने के लिए सूची हर बार कॉपी करने से बचना चाहते हैं

+0

यह एक 'सूची ' या सिर्फ एक 'IEnumerable ' है? –

उत्तर

13

IEnumberable है:

list = list.Where(car => car.Year <= 2000); 

आप ICollection<T> के साथ काम कर रहे हैं और आप सिर्फ एक फ़िल्टर किए गए परिणाम नहीं मिल, लेकिन वास्तव में स्रोत संग्रह में हेरफेर करना चाहते हैं, आप एक खुद दर्जी संग्रह के लिए किए गए एक्सटेंशन बना सकते हैं अपरिवर्तनीय है, लेकिन आप कुछ इस स्वरूप में कर सकते हैं:

list = list.Where(r=>r.Year<=2000) 

या लिखना एक विस्तार विधि:

public static IEnumerable<T> RemoveWhere<T>(this IEnumerable<T> query, Predicate<T> predicate) 
{ 
    return query.Where(e => !predicate(e)); 
} 
+0

अद्यतन प्रश्न देखें – leora

+0

@ooo IEnumerable अपरिवर्तनीय है, इसलिए आप आइटम को सरल या हटा नहीं सकते हैं, यह असंभव है। बेशक आप केवल एक सूची का उपयोग कर सकते हैं, लेकिन यह कहना संभव नहीं है कि यह तेज़ होगा। यदि आप इसे और अधिक करते हैं, तो स्थगित निष्पादन को ध्यान में रखें। – sloth

4

आप IEnumerable<T> के साथ काम कर रहे हैं, तो कैसे के बारे में कहाँ?

public static class CollectionExtensions { 
    public static ICollection<T> RemoveWhere<T>(this ICollection<T> collection, Func<T, bool> predicate) { 
     List<T> toRemove = collection.Where(item => predicate(item)).ToList(); 
     toRemove.ForEach(item => collection.Remove(item)); 
     return collection; 
    } 
    } 
+0

अद्यतन प्रश्न देखें – leora

+0

मेरा अद्यतन उत्तर देखें ;-) –

6

पार्टी के लिए लेकिन किसी भी एक होगा इस समस्या भर आता है, यहाँ एक क्लीनर समाधान है के लिए बहुत देर हो चुकी है:

MyList.RemoveAll(p => p.MyProperty == MyValue); 
संबंधित मुद्दे