समस्या यह है कि आप 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
};