2011-08-24 9 views
24

वाक्य रचना "नहीं में" मैं "नहीं में" एसक्यूएल समकक्ष के लिए इकाई की रूपरेखा वाक्य रचना के साथ एक सरल मुद्दा है। अनिवार्य रूप से, मैं इकाई की रूपरेखा वाक्य विन्यास में निम्नलिखित SQL सिंटैक्स परिवर्तित करना चाहते हैं:एसक्यूएल के लिए इकाई की रूपरेखा 4.1

select ID 
from dbo.List 
where ID not in (list of IDs) 

यहाँ एक विधि है कि मैं एक ही रिकॉर्ड को खोजते समय के लिए उपयोग करते हैं:

public static List GetLists(int id) 
{ 
    using (dbInstance db = new dbInstance()) 
    { 
     return db.Lists.Where(m => m.ID == id); 
    } 
} 

यहाँ एक छद्म तरीका है कि

public static List<List> GetLists(List<int> listIDs) 
{ 
    using (dbInstance db = new dbInstance()) 
    { 
     return db.Lists.Where(**** What Goes Here ****).ToList(); 
    } 
} 

किसी को भी मुझे क्या Where खंड क्षेत्र में चला जाता है के रूप में संकेत दे सकते हैं: मैं इस के लिए उपयोग करना चाहते हैं? मैं इस बारे में कुछ मंचों पढ़ सकते हैं और .Contains() या .Any() का उपयोग करने का उल्लेख देखा, लेकिन उदाहरण में से कोई भी एक करीबी पर्याप्त योग्य थे।

+1

+1 बहुत अच्छा, अच्छी तरह से शब्दों में प्रश्न कॉल करने के लिए जब तक प्रत्येक रिकॉर्ड 500MB या अधिक है ... याद स्टैक ओवरफ़्लो पर यहां पूछा गया। स्वागत हे। – ckittel

उत्तर

49

की तरह इस एक जाना दे दो ...

public static List<List> GetLists(List<int> listIDs) 
{ 
    using (dbInstance db = new dbInstance()) 
    { 
     // Use this one to return List where IS NOT IN the provided listIDs 
     return db.Lists.Where(x => !listIDs.Contains(x.ID)).ToList(); 

     // Or use this one to return List where IS IN the provided listIDs 
     return db.Lists.Where(x => listIDs.Contains(x.ID)).ToList(); 
    } 
} 

ये लगभग निम्नलिखित डेटाबेस प्रश्नों में बदल जाएगी:

SELECT [Extent1].* 
FROM [dbo].[List] AS [Extent1] 
WHERE NOT ([Extent1].[ID] IN (<your,list,of,ids>)) 

या

SELECT [Extent1].* 
FROM [dbo].[List] AS [Extent1] 
WHERE [Extent1].[ID] IN (<your,list,of,ids>) 
क्रमशः

+0

यह सही है - हिचकी के बिना काम किया! उदाहरणों के लिए धन्यवाद। –

+2

यहां बहुत संक्षिप्त स्पष्टीकरण। – BentOnCoding

2

शुरुआत के लिए यह प्रयास करें ...

m => !listIDs.Contains(m.ID) 
3

यह एक पीछे की ओर एक छोटा सा लगता है की आवश्यकता है। यह पूछने के बजाय कि क्या आईडी आईडी की कुछ सूची में नहीं है, आपको आईडी की कुछ सूची में पूछना है कि इसमें मूल्य नहीं है। इस

int[] list = new int[] {1,2,3} 
Result = (from x in dbo.List where list.Contains(x.id) == false select x); 
0

यह आप क्या चाहते हैं इसके लिए कोई तरीका हो सकता है:

// From the method you provided, with changes... 
public static List GetLists(int[] ids) // Could be List<int> or other =) 
{ 
    using (dbInstance db = new dbInstance()) 
    { 
     return db.Lists.Where(m => !ids.Contains(m.ID)); 
    } 
} 

हालांकि मैंने पाया कि ऐसा करने से कुछ परिदृश्यों पर त्रुटि बढ़ाई जा सकती है खास तौर पर जब सूची बहुत बड़ा है और कनेक्शन कुछ हद तक धीमी है।

सब कुछ जांच करने के लिए इससे पहले कि इसलिए इस फिल्टर कम मूल्यों की जाँच करने के लिए हो सकता है याद रखें।

भी याद रखें कि Linq चर पॉप्युलेट नहीं है जब आप अपने फिल्टर/क्वेरी का निर्माण (कम से कम डिफ़ॉल्ट रूप से नहीं)। आप प्रत्येक रिकॉर्ड के लिए पुनरावृत्ति करने के लिए जा रहे हैं, एक ToList() या toArray() विधि से पहले, अपने पहले होने के लिए

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