2010-08-13 11 views
7

मैं IQueryable, लैम्ब्डा अभिव्यक्तियों और सामान्य रूप से LINQ के साथ एक नौसिखिया हूं। मैं इस तरह एक जहां खंड में एक सबक्वेरी डाल करने के लिए करना चाहते हैं:LINQ subquery

नमूना कोड:

SELECT * FROM CLIENT c WHERE c.ETAT IN (
SELECT DDV_COLUMN_VAL FROM DATA_DICT_VAL 
WHERE TBI_TABLE_NAME = 'CLIENT' AND DD_COLUMN_NAME = 'STATUS' 
      AND DDV_COLUMN_VAL_LANG_DSC_1 LIKE ('ac%')) 

मैं कैसे LINQ में इस का अनुवाद करते हैं?

उत्तर

12
var innerquery = from x in context.DataDictVal 
       where x.TbiTableName == myTableNameVariable 
        && x.DdColumnName == "Status" 
        && x.DdbColumnValLangDsc1.StartsWith("ac") 
       select x.DdvColumnVal; 

var query = from c in context.Client 
      where innerquery.Contains(c.Etat) 
      select c; 
+0

हम एक विजेता है धन्यवाद एक बहुत kbrimington हालांकि मैं की तरह होता है में थोड़ा और अधिक समझने के लिए आप कुछ अच्छा है चाहेंगे।!।। LINQ, IQueryable और lambda अभिव्यक्तियों के बारे में सुझाव पढ़ रहे हैं? धन्यवाद फिर से! –

+0

हालांकि यह इस सटीक परिदृश्य में मदद नहीं करेगा, लेकिन मुझे इन उदाहरणों को पढ़ने से बहुत अधिक लाभ मिला: http://msdn.microsoft.com/en-us /vcsharp/aa336746.aspx। मैंने लिंक-टू-एसक्यूएल पर स्कॉट गु की श्रृंखला से भी बहुत कुछ सीखा: http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql -part-1.aspx – kbrimington

+0

मेरे लिए, यह काम नहीं करता है। कंटेनर (कॉलम) EXISTS() बनाता है जो IN() के समान नहीं है। मैं इसे अपने प्रोजेक्ट में करने की कोशिश कर रहा था और क्योंकि यह EXISTS() बनाता है मुझे लगभग 700 और पंक्तियां मिलती हैं। – ScubaSteve

1

यदि आप लिंक के लिए नए हैं, तो आपको बिल्कुल दो आवश्यक टूल की आवश्यकता है। पहला ऐसा टूल है जो अधिकांश टी-एसक्यूएल कथन को लिंकर में परिवर्तित करता है जिसे लिंकर (http://www.sqltolinq.com/) कहा जाता है। यह आपके प्रश्न में क्वेरी का ख्याल रखना चाहिए। दूसरा टूल लिंकपैड (http://www.linqpad.net/) है। यह आपको लिंक के साथ अभ्यास करने में मदद करेगा क्योंकि आप प्रश्नों के साथ अभ्यास करते हैं।

मैं अक्सर मेरे लिए एक टी-एसक्यूएल क्वेरी बदलने के लिए लिंकर का उपयोग करता हूं, और फिर इसे ठीक करने के लिए लिंककैड का उपयोग करता हूं।

+0

धन्यवाद! मेरे पास पहले से ही लिंककैड है, अब मुझे लिंकर मिल जाएगा। –

4
from c in db.Client 
where (from d in db.DataDictVal 
     where d.TblTableName == "Client" 
     && d.DDColumnName == "Status" 
     && dd.DdvColumnValLandDsc1.StartsWith("ac")) 
     .Contains(c.Etat) 
select c; 
+0

:(आप FYI बहुत जल्दी टाइप –

+0

: आप आंतरिक क्वेरी पर चुनिंदा अभिव्यक्ति भूल रहे हैं – kbrimington

0
Linq विधि वाक्य रचना के साथ

एक ही उदाहरण:

var innerquery = dbcontext.DataDictVal     
       .where(x=> x.TbiTableName == myTableNameVariable 
        && x.DdColumnName == "Status" 
        && x.DdbColumnValLangDsc1.StartsWith("ac")) 
       .select(x=>x.DdvColumnVal) 

var query = dbcontext.Client 
      .where(c=>innerquery.Contains(c.Etat)) 

नोट:

, इस सवाल का जवाब उपलब्ध कराने रहा हूँ क्योंकि जब मैं जवाब के लिए खोज की है, मैं नहीं मिल सका बहुत अधिक जवाब जो विधि वाक्यविन्यास में एक ही अवधारणा को समझाता है।

तो भविष्य में, यह लोगों के लिए उपयोगी हो सकता है, जिन्होंने आंतों से आज मेरे जैसे विधि वाक्यविन्यास की खोज की। धन्यवाद कार्तिक

+1

मुझे नहीं लगता कि यह आवश्यक है, लेकिन कम से कम आप इसे वाक्य रचना सही –

+0

हाँ कर सकता है, मैं अब इस जोड़ने के लिए, जो लोग आम तौर पर LINQ की विधि वाक्य विन्यास का उपयोग के लिए आशा है कि यह उनके लिए उपयोगी हो सकता है –

+0

हाँ, लेकिन इस मामले में रूपांतरण वास्तव में रॉकेट विज्ञान नहीं है। लेकिन फिर, वाक्यविन्यास सही नहीं है (निचला मामला)। –