Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

लेफ्ट जॉइन ट्रांसलेट टू इनर जॉइन इन Linq

समस्या यह है कि आप OutPut पर वर्ष, शहर और QsNo चेक कर रहे हैं शामिल होने के बाद परिवर्तनशील... लेकिन यदि OutPut शून्य है (जो तब होगा जब AllCosts में कोई पंक्तियाँ न हों) तो ये जाँचें हमेशा झूठी होंगी, इसलिए युग्म (कोड, OutPut) को जहाँ क्लॉज़ द्वारा फ़िल्टर किया जाएगा। EF इस तथ्य का पता लगाता है और एक क्वेरी उत्पन्न करता है जो केवल एक आंतरिक जुड़ाव का उपयोग करके अधिक कुशल है।

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

var Result = from code in ent.ProductCodes
                     join cost 
                       in ent.Costs.Where(c => c.Year == Year && c.City == City && c.QsNo == Qsno)
                       on new { code.Year, code.Code } equals new { cost.Year, cost.Code }
                       into AllCosts
                     from OutPut in AllCosts.DefaultIfEmpty()
                     where code.PageNo == PageNo
                     select new
                     {
                         ProductCode = code.Code
                         Col6 = OutPut.Price
                     };



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीसी-नाम\SQLEXPRESS से कनेक्ट नहीं हो सकता

  2. GETDATE() SQL सर्वर में उदाहरण (T-SQL)

  3. कैसे एक varchar से अंतिम चार अक्षर लेने के लिए?

  4. रोलअप फ़ंक्शन - NULL को बदलें

  5. सूचीबद्ध करें कि SQL सर्वर 2005 में कौन से कॉलम में पूर्ण-पाठ अनुक्रमणिका है