2009-07-21 12 views
12

के साथ जुड़ें मैं LINQ के साथ एक OR कथन का उपयोग करके जॉइन करना चाहता हूं।LINQ या

SELECT t.id 
FROM Teams t 
INNER JOIN Games g 
    ON (g.homeTeamId = t.id OR g.awayTeamId = t.id) 
    AND g.winningTeamId != 0 
    AND g.year = @year 
GROUP BY t.id 

मैं मुसीबत परिवर्तित उस खंड पर LINQ करने के लिए हो रही है:

यहाँ SQL क्वेरी मैं के साथ शुरू कर रहा हूँ है। यह वह जगह है जहाँ मैं कर रहा हूँ पर:

var y = from t in db.Teams 
     join g in db.Games on t.ID equals g.AwayTeamID //missing HomeTeamID join 
     where g.WinningTeamID != 0 
      && g.Year == year 
     group t by t.ID into grouping 
     select grouping; 

मुझे लगता है कि मैं इस्तेमाल कर सकते हैं:

join g in db.Games on 1 equals 1 
where (t.ID == g.HomeTeamID || t.ID == g.AwayTeamID) 

और इस काम करता है लेकिन hacky लगता है एक तरह से लगता है। क्या कोई बेहतर तरीका है?

उत्तर

2

जहां खंड एक बूलियन स्थिति लागू करता है, इसलिए "||" का उपयोग करना जाने का रास्ता है। आप कई खंडों को श्रृंखलाबद्ध कर सकते हैं लेकिन मुझे विश्वास है कि आपको "या" के बजाए "और" ऑपरेशन मिलेगा।

+1

मैं निश्चित रूप से उपयोग करना चाहता हूं || लेकिन मैं उम्मीद कर रहा था कि मैं इसे जॉइन में डाल सकता हूं। मैंने अभी तक यह निष्पादित नहीं किया है कि एसक्यूएल आउटपुट क्या है, लेकिन मैंने इसमें शामिल होने के लिए 1 बराबर 1 और जहां या खंड में मेरा या कथन नीचे संकलित किया है। – AndyMcKenna

15

मैं भी जब तक मैं निम्नलिखित समाधान है, जो मेरी स्थिति के लिए अच्छी तरह से काम मिल गया इस के साथ संघर्ष किया:

var y = from t in db.Teams 
     from g in db.Games 
     where 
     (
      t.ID == g.AwayTeamID 
      || t.ID == g.HomeTeamID 
     ) 
      && g.WinningTeamID != 0 
      && g.Year == year 
     group t by t.ID into grouping 
     select grouping; 

कवर के तहत, अपने समाधान शायद बहुत ही इस एक के करीब काम करता है। हालांकि, मैं शर्त लगाता हूं कि यह थोड़ा तेज़ है यदि आप इसे बेंचमार्क करते हैं क्योंकि यह दूसरे डेटासेट में प्रत्येक आइटम के साथ पहले डेटासेट में प्रत्येक आइटम में शामिल नहीं होता है, जो किसी भी (या दोनों) डेटासेट वास्तव में बड़े होते हैं, तो आपदा हो सकती है।

+0

क्या यह वास्तव में ओपी के समाधान में दो तालिकाओं के प्रत्येक आइटम में शामिल होगा? क्या 'कहां' प्रभावित नहीं करेगा कि केवल उन शर्तों को पूरा करने वाले लोग शामिल होंगे ...? –