2011-05-23 12 views
5

मैं अगर मैं लिखना FindAllक्या मैं शामिल विधि के साथ एम्बेडेड लैम्ब्डा का उपयोग कर सकता हूं?

के साथ एक सूची फ़िल्टर करना चाहते हैं:

.FindAll(
    p => p.Field == Value && 
    p.otherObjList.Contains(otherObj)); 

यह ठीक है, लेकिन अगर मैं

.FindAll(
    p => p.Field == Value && 
    p.otherObjList.Contains(
     q => q.Field1 == Value1 && 
     q.Field2 == Value2)); 

बारे में मैं सी # वाक्यविन्यास त्रुटि संदेश मिलता है: अज्ञात विधि FindAll (?) .. अन्य ऑब्जेलिस्ट

मैं अन्य ओबीजे को बिल्कुल परिभाषित नहीं कर सकता, हो क्योंकि मैं केवल दो फ़ील्ड, फ़ील्ड 1 और फील्ड 2 के मानों को जानता हूं।

मैंने क्या गलत किया है? इस मामले में मैं क्या कर सकता हूं?

उत्तर

7

Contains() दोनों संग्रह प्रकारों के साथ-साथ LINQ संस्करण के लिए विधि संग्रह के समान प्रकार के तर्क की अपेक्षा करता है, न कि लैम्ब्डा।

ऐसा प्रतीत होता है कि आप यह जांचने की कोशिश कर रहे हैं कि कोई आइटम किसी शर्त से मेल खाता है या नहीं। आपको Any() विधि का उपयोग करना चाहिए।

.FindAll(p => p.Field == Value 
      && p.otherObjList.Any(q => q.Field1 == Value1 && q.Field2 == Value2)) 
+0

धन्यवाद !!! माइकएम – mikeM

+0

@mikeM: इस उत्तर को सही के रूप में पहचानना न भूलें। – Tom

+0

@refactor: वह शायद भूल जाएगा। – x0n

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

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