Pages

Thursday, November 3, 2022

Left join using LINQ to SQL

 public IActionResult GetDealerByReference(string countryCode, string dealerId)

{

    if (string.IsNullOrEmpty(countryCode))

    return BadRequest("country code cannot be empty");

    if (string.IsNullOrEmpty(dealerId))

        return BadRequest("dealerId cannot be empty");

    string toBeReplaced = "'INSPIRA', 'OTHER', ";

    // this is of type System.Linq.IQueryable 

    var webDealerItemRestrictions = _repository.CacheJdeDealerItemRestriction.FindAll();

    // this is of type System.Linq.IQueryable 

    var webDealerAddresses = _repository.CacheJdeDealerAddress.FindAll();

    //left join webDealerAddresses with webDealerItemRestrictions

    var result = (from addresses in webDealerAddresses.Where(x => x.DealerID == dealerId &&                         x.CountryCode == countryCode)

            from restrictions in webDealerItemRestrictions

            .Where(x => addresses.DealerID == x.DealerID)

            .DefaultIfEmpty()

             select new { addresses, restrictions }).FirstOrDefault();

   if (result == null) return NotFound("Not Found");

   var webDealer = new WebDealers()

   {

    Code = result.restrictions.Code,

    Address1 = result.addresses.Address1,

    Address2 = result.addresses.Address2,

   AreaCode = result.addresses.AreaCode,

   Brands = result.addresses.BrandListing.Replace(toBeReplaced, ""),

   CountryCode = result.addresses.CountryCode,

   DealerName = result.addresses.DealerName,

   EmailAddress = result.addresses.EMailaddress,

   PhoneNumber = result.addresses.PhoneNumber

  };

  return Ok(JsonConvert.SerializeObject(new List<WebDealers>() { webDealer }));

}

No comments: