2013-09-04 4 views
5

तो मुझे पता है कि iQueryables का अनुवाद SQL कथन में किया गया है और इस प्रकार आप उन सभी संभावित विधियों को संभाल नहीं सकते हैं जिन्हें आप किसी खंड में डाल सकते हैं। कि EF5 इस अनुवाद करने में सक्षम होना चाहिएइकाइयों के लिए IQueryable। जहां (संपत्ति स्थानीय सरणी में है)

int[] alreadySelectedIds = ... 
var subjects = Entities.NewInstance.Subjects.Where(x => Array.IndexOf(alreadySelectedIds, x.Id) == -1).ToList(); 

और ये नीचे की तरह पढ़ने के बाद, मैं शान्ति हूँ:

लेकिन यह मैं क्या करने की कोशिश कर रहा हूँ है।
Getting Entities whose keys match list(or array) of ids

हालांकि, मैं इस त्रुटि हो रही है:

LINQ to Entities does not recognize the method 'Int32 IndexOf[Int32](Int32[], Int32)' method, and this method cannot be translated into a store expression.

और इस त्रुटि googling मुझे ज्यादा मदद नहीं देता है।

मैं भी

var newSubjects = Entities.NewInstance.Subjects.Where(x => alreadySelectedIds.Contains(x.Id)).ToList(); 

Unable to create a null constant value of type 'System.Int32[]'. Only entity types, enumeration types or primitive types are supported in this context.

और

List<int> alreadySelectedIds = ... 

Unable to create a null constant value of type 'System.Collections.Generic.List`1'. Only entity types, enumeration types or primitive types are supported in this context.

मैं अटक कर रहा हूँ और मेरे मस्तिष्क सुंदर वसूली के किसी भी प्रकार के लिए संभावनाओं से परे भावुक हो रही है की कोशिश की है। क्या कोई मुझे कृपया बचा सकता है?

उत्तर

4
Entities.NewInstance.Subjects.Where(x => alreadySelectedIds.Contains(x.Id)).ToList(); 

काम करना चाहिए, अगर alreadySelectedIs

आप के अंदर या आपकी क्वेरी से पहले एक अशक्त जांच कर सकते हैं अशक्त नहीं है:

Entities.NewInstance.Subjects.Where(x => alreadySelectedIds == null 
             ? true // or false 
             : alreadySelectedIds.Contains(x.Id) 
            ).ToList(); 

(फिर से लिखा जा सकता है, निर्भर करता है अगर आप चाहते हैं सभी या कुछ भी नहीं करता है, तो alreadySelectedIds रिक्त है)

//return all if null 
x => alreadySelectedIds == null || alreadySelectedIds.Contains(x.Id) 

या

//return nothing if null 
x => alreadySelectedIds != null && alrreadySelectedIds.Contains(x.Id) 
+2

यह काफी शानदार है कि एक साधारण समस्या के साथ व्यर्थ में कैसे संघर्ष कर सकता है, क्योंकि समस्या की समझ को सही करने का मार्ग निराशा और बौद्धिक आतंक के बीच खो गया है। लेकिन एक आदमी क्या कर सकता है, लेकिन एक आदमी होने के नाते? – Alex

+0

@ एलेक्स कंप्यूटर विज्ञान के लिए बहुत अधिक दर्शन;) लेकिन ... वास्तव में! –

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