sql >> Database >  >> RDS >> Sqlserver

Left Join Vertaal naar Inner join in Linq

Het probleem is dat u het jaar, de stad en het QsNo controleert op de OutPut variabele na de join... maar als OutPut null is (wat zou gebeuren als er geen rijen in AllCosts zijn), dan zijn deze controles altijd onwaar, dus het paar (code, OutPut) wordt uitgefilterd door de waar-clausule. EF detecteert dit feit en genereert een query die efficiënter is door alleen een inner join te gebruiken.

Wat u echt wilt doen, is kandidaatrijen uit Kosten filteren, in plaats van te filteren op (code, kosten)paren. Om dit te doen, kunt u uw filter naar boven verplaatsen, zodat het rechtstreeks van toepassing is op de tabel Kosten:

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. PHP SQL, query retourneert slechts één rij met gegevens

  2. Hoe het aantal verbindingen te verminderen met SQLAlchemy + postgreSQL?

  3. Like-wildcard gebruiken in voorbereide verklaring

  4. Kunnen Django-modellen MySQL-functies gebruiken?