2011-05-26 21 views
11

इनमें से कोई भी चाल करने के लिए लग रहे हैं:मैं ListCollectionView के विरुद्ध एक linq क्वेरी कैसे लिखूं?

var source = myViewModel.MyListCollectionView.Select(x => x as MyType); 
var source = myViewModel.MyListCollectionView.Select<object, MyType>(x => x as MyType); 
var source = myViewModel.MyListCollectionView.SourceCollection.Select<object, MyType>(x => x as MyType); 

उत्तर

26

ListCollectionView केवल गैर सामान्य IEnumerable इंटरफ़ेस लागू करता है। मैं संदेह आप चाहते हैं:

var source = myViewModel.MyListCollectionView.Cast<MyType>(); 

या (कुछ मान MyType का नहीं होगा अगर, और कहा कि ठीक है):

var source = myViewModel.MyListCollectionView.OfType<MyType>(); 
+3

मामूली नोट: ऑफ टाइप टाइप नल आइटम भी हटा देगा। –

7
var source = myViewModel.MyListCollectionView.OfType<MyType>(); 
2

InternalList संपत्ति प्रकार IList ताकि आप की है इसके खिलाफ linq क्वेरी लिखने में सक्षम होंगे।

+0

असल में var स्रोत = myViewModel.MyListCollectionView.InternalList.Select (x => x.MyProperty); – Tion

+0

काम नहीं करता है यह गैर सामान्य IList है, इसलिए आपको अभी भी कास्ट <> का उपयोग करना होगा। उल्लेख नहीं है कि यह एक संरक्षित संपत्ति है और जब तक आप ListCollectionView को विस्तारित नहीं कर रहे थे तब तक आप इसका उपयोग नहीं कर पाए – Tion

1

आह इसे मिला। आपको पहले <> कास्ट का उपयोग करना होगा!

var source = myViewModel.MyListCollectionView.Cast<MyType>().Select(p=>p.MyProperty);