I am working in a asp.net core web API with EF Core version 5.0.
I wrote a query with a if condition.
if (incomingFacilities.Count() > 0)
then I need to filter the facilities those are in the incomingFacilities list.
If (incomingFacilities.Count() < 0) I do not need to filter. I have to get only 6 distinct facility list.
But write below code. The issue is I need to repeat same code again and again.
So I thing It is better to the if condition inside
.Where(x => (incomingFacilities.Count() > 0 ) ?
(incomingFacilities.Contains(x.FacilityCode)) :
(x.FacilityCode > 0 )),
Here I did the First part correctly, (ie: If incomingFacilities.Count() > 0 then do filter.
But the second part is if incomingFacilities.Count() < 0 then there's no need to filter, just send the list of facilities (only no of 6 facilities those are distinct)
// this code is correct, but same code repeated
if (incomingFacilities.Count() > 0)
{
var hotels = await _context.Hotels
.Where(i => (i.DestinationCode == request.Destination))
.Select(i => new HotelListHotelVm
{
// removed some
HotelFacilities = i.Facilities.Select(x => new HotelListHotelVm.HotelListFacilityVm {
Id = x.Id,
FacilityGroupCode = x.FacilityGroupCode,
HotelFacilityGroupDescription = x.FacilityGroup.Description,
FacilityCode = x.FacilityCode
})
.Where(x => (incomingFacilities.Count() > 0 ) ? (incomingFacilities.Contains(x.FacilityCode)) : (x.FacilityCode > 0 )),
})
// rest
;
}
else
{
var hotels = await _context
.Hotels
.Where(i => (i.DestinationCode == request.Destination))
.Select(i => new HotelListHotelVm
{
// removed some
HotelFacilities = i.Facilities.ToList().Distinct().Take(6)
.Select(x => new HotelListHotelVm.HotelListFacilityVm {
Id = x.Id,
FacilityGroupCode = x.FacilityGroupCode,
HotelFacilityGroupDescription = x.FacilityGroup.Description,
FacilityCode = x.FacilityCode
})
})
// rest
;
}
.Where(x =>(incomingFacilities.Count() > 0 ) ? (incomingFacilities.Contains(x.FacilityCode)) : (x.FacilityCode > 0 )),
Here,
I did If incomingFacilities.Count() > 0 then, use where clause.
But I don't know how to say, If not incomingFacilities.Count() > 0 then do a list of facilities with distinct value and take only 6. Like this HotelFacilities = i.Facilities.ToList().Distinct().Take(6)
.Select(x => new HotelListHotelVm.HotelListFacilityVm {
Id = x.Id,
FacilityGroupCode = x.FacilityGroupCode,
HotelFacilityGroupDescription = x.FacilityGroup.Description,
FacilityCode = x.FacilityCode
})