2008-12-05 14 views
13

मैं लिंक के माध्यम से एक ही टेबल से एकाधिक कॉलम में कैसे शामिल हो सकता हूं?linq से sql: एक ही तालिका से कई कॉलम में शामिल हों

उदाहरण के लिए: मैं पहले से ही इस है ...

join c in db.table2 on table2.ID equals table1.ID 

मैं इस जोड़ने की जरूरत है ...

join d in db.table2 on table2.Country equals table1.Country 

उत्तर

13

आप अपनी क्वेरी को शामिल ऑपरेटर का उपयोग करने के बजाय कहां क्लॉज के अंदर डाल सकते हैं।

जॉइन ऑपरेटर VB.NET में एकाधिक खंडों का समर्थन करता है, लेकिन सी # नहीं। इन दोनों तालिकाओं

वैकल्पिक रूप से, आप से http://www.onedotnetway.com/linq-to-sql-join-on-multiple-conditions/

'एसक्यूएल' वाक्य रचना, उदा .:

from t1 in table1 
from t2 in table1 
where t1.x == t2.x 
&& t1.y == t2.y 
+1

लगभग 20 साल पहले इस तार्किक संरचना को एसक्यूएल में हटा दिया गया था। (http://stackoverflow.com/questions/334201/why-isnt-sql-ansi-92- मानक-better-adopted-over-ansi-89) इसे linq में मिलान करना गलत नहीं है, खासकर छोटे प्रश्नों में इस तरह, लेकिन पीट हास का वाक्यविन्यास स्टाइलिस्टिक रूप से बेहतर है – user314321

1

वीबी में:

dim qry = FROM t1 in table1 _ 
      JOIN t2 in table2 on t2.ID equals t1.ID _ 
      AND t2.Country equals t1.Country 
29

यह वह जगह है एकमात्र तरीका मैं इसे काम करने में सक्षम था (सी # में)।

var qry = from t1 in table1 
      join t2 in table2 
      on new {t1.ID,t1.Country} equals new {t2.ID,t2.Country} 
      ... 
+0

क्या आप इसे प्रारूपित कर सकते हैं? यह पढ़ने के लिए आसान बना देगा। – KClough

12

की एएनएसआई -82 शैली का उपयोग कर सकते पोस्टकोड और CouncilCode सामान्य फ़ील्ड के रूप में की है। आइए कहें कि हम शॉपिंगमॉल से सभी रिकॉर्ड्स पुनर्प्राप्त करना चाहते हैं, जहां पोस्टकोड और काउंसिलकोड दोनों हाउस मैच पर हैं। इसके लिए हमें दो कॉलम का उपयोग करके शामिल होने की आवश्यकता है। LINQ में ऐसे जोड़ों को अनाम प्रकारों का उपयोग करके किया जा सकता है। यहाँ एक उदाहरण है।

var query = from s in context.ShoppingMalls 
     join h in context.Houses 
     on 
     new { s.CouncilCode, s.PostCode } 
     equals 
     new { h.CouncilCode, h.PostCode } 
     select s; 
+0

यह नहीं पता कि क्वेरी सिंटैक्स का उपयोग करके एकाधिक कॉलम लिनक का उदाहरण खोजने के लिए गुगलिंग कितना लिया गया है। धन्यवाद। – RMuesi

6
var query = from s in context.ShoppingMalls 
join h in context.Houses 
on 
new {CouncilCode=s.CouncilCode, PostCode=s.PostCode } 
equals 
new {CouncilCode=h.District, PostCode=h.ZipCode } 
select s; 

यह डेटाप्रकार के किसी भी प्रकार के लिए लागू है।

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