2012-11-22 13 views
13

मैं नीचेलैम्ब्डा अभिव्यक्ति "आईएन" ऑपरेटर मौजूद है?

IQueryable<Object> queryEntity = 
       _db.Projects.Where(Project=>Project.Id.IN(1,2,3,4)); 

तरह लैम्ब्डा अभिव्यक्ति का निर्माण करने मैं लैम्ब्डा अभिव्यक्ति में किसी भी IN ऑपरेटर नहीं मिल रहा है की तलाश में हूँ।

किसी के पास सुझाव हैं?

+2

सी [ 'IEnumerable.Contains'] (http://msdn.microsoft.com/en-us/library/ लिख सकते हैं: बस अपने तर्क को उलटने bb357185.aspx); "स्थानीय रूप से सोर्स" अनुक्रमों से किस प्रकार की अनुमति है, इस पर ईएफ प्रतिबंध हैं। इंटीजर ठीक हैं। –

उत्तर

17

इसके लिए IEnumerable.Contains का उपयोग करें।

var idList = new[] { 1, 2, 3, 4 }; 
IQueryable<Object> queryEntity = 
       _db.Projects.Where(Project => idList.Contains(Project.Id)); 

आप idList पाठ्यक्रम की इनलाइन बना सकते हैं।

+1

लेकिन ध्यान रखें कि यदि यह वास्तव में बड़ी आईडीलिस्ट (8000 आईडी कहें) के साथ डीबी में जाता है तो यह असफल हो सकता है। मुझे लगता है कि यह बैच आकार या sth से अधिक है - कम से कम मेरे पास मामला था। –

+0

हां - धीमी एसक्यूएल कॉल में अनुवादित अजीब LINQ क्वेरीज़ बनाने से उत्पन्न होने वाली सभी समस्याएं लागू होती हैं। लेकिन यह वास्तव में IQueryable के साथ आप जो कुछ भी करते हैं उसके लिए जाता है। :) –

+2

यदि 'idList' वास्तव में बड़ा है, तो एक अच्छा मौका यह एक डीबी क्वेरी परिणाम के रूप में आया है, इस मामले में आपको उस क्वेरी के खिलाफ इसके बजाय शामिल होना चाहिए, है ना? –

2

वहाँ ऑपरेटर में नहीं है, लेकिन एक में शामिल है देख रहे हैं।

IQueryable<Object> queryEntity = _db.Projects.Where(Project=>(new []{1,2,3,4}).Contains(Project.Id));

+0

वाक्यविन्यास त्रुटि। (1,2,3,4) का अर्थ है – Tilak

0

आप अपने खुद के

public static bool In(this object item, IEnumerable list) 
{ 
    return list.Contains(item); 
} 

public static bool In(this object item, params object[] list) 
{ 
    return item.In(list); 
} 
+0

और यह http://msdn.microsoft.com/en-us/library/bb352880.aspx – Tilak

+0

से अलग कैसे है इसे ओपी चाहता था – slawekwin

+0

यह उपयोग करने योग्य नहीं है एक 'IQueryable' संदर्भ में, चूंकि एसक्यूएल में इसका अनुवाद करने का कोई तरीका नहीं है, सर्वर समझ जाएगा। –

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