var query = from left in 左 join right in 右 on left.欄位 equals right.欄位 into subGroup from right in subGroup.Where(x=>x.合併前的條件篩選1) .Where(x=>x.合併前的條件篩選2) .Where(x=>x.合併前的條件篩選3) .DefaultIfEmpty() 1.使用.DefaultIfEmpty()關鍵字進行join 2.Where條件要下再.DefaultIfEmpty()之前,否則Linq有可能因為where條件,產出的SQL會變成inner join var fundStatus = ((int)ETFFundStatus.發行).ToString(); var fundType = ((int)ETFFundType.股票型).ToString(); var fundValueProClaim = "Y"; var fundValueType = FundValueType.ETF基金; var start = startDate.ToShortTaiwanDate(); var end = endDate.ToShortTaiwanDate(); // Join EC Fund var fundQuery = from pitcfund in db.PITC_ETF_Fund join ecfund in db.EC_ETF_FND on pitcfund.sFundCode equals ecfund.FUND_CODE into g from ecfund in g.Where(x => x.FUND_STATUS == fundStatus) .Where(x => x.FUND_TYPE == fundType) .DefaultIfEmpty() select new { pitcfund, ecfund }; // Join ETF Value var query = from fund in fundQuery join value in db.EC_ETF_VALUE on fund.ecfund.FUND_CODE equals value.FUND_CODE into g from value in g.Where(x=>x.PROCLAIM_YN== fundValueProClaim) .Where(x => x.TYPE == fundValueType) .Where(x => string.Compare(x.TRAN_DATE, start) >= 0) .Where(x => string.Compare(x.TRAN_DATE, end) <= 0) .DefaultIfEmpty() select new { fund.pitcfund, fund.ecfund, value };
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言