Reputation: 307
I have below LINQ query:
SailingMain_Details = SailingMain_Details.Where(f => f.Duration == durationCr_Filter
&& f.DeparturePortID == depPortCr_Filter
&& f.CruiseLine == cruLineCr_Filter
&& f.ShipName == cruShipCr_Filter
&& f.DestinationCr == destinationCr_Filter).ToList();
in above query sometime i get some parameters values like value=="any". in that situation i want to avoid checking only that parameter. Can anyone please guide me how to do that. Thanks.
Upvotes: 0
Views: 78
Reputation: 157
Apply every filter on separate. example
if(durationCr_Filter.toUpper() != "ANY")
SailingMain_Details = SailingMain_Details.Where(f => f.Duration == durationCr_Filter);
if(depPortCr_Filter.toUpper() != "ANY")
SailingMain_Details = SailingMain_Details.Where(f => f.DeparturePortID == depPortCr_Filter);
if(cruLineCr_Filter.toUpper() != "ANY")
SailingMain_Details = SailingMain_Details.Where(f => f.CruiseLine == cruLineCr_Filter);
if(cruShipCr_Filter.toUpper() != "ANY")
SailingMain_Details = SailingMain_Details.Where(f => f.ShipName == cruShipCr_Filter);
if(destinationCr_Filter.toUpper() != "ANY")
SailingMain_Details = SailingMain_Details.Where(f => f.DestinationCr == destinationCr_Filter);
Upvotes: 1
Reputation: 514
e.g avoid checking means basically it shall return true by default. for one item see below. other can follow the same
&& (depPortCr_Filter == 'any' || f.DeparturePortID == depPortCr_Filter).
Upvotes: 0
Reputation: 37367
To achieve what you want let me show you by example with DeparturePortID
. Let's say "any" valu eis -1
:
SailingMain_Details = SailingMain_Details
.Where(f =>
f.Duration == durationCr_Filter
&& (depPortCr_Filter == -1 || f.DeparturePortID == depPortCr_Filter)
&& f.CruiseLine == cruLineCr_Filter
&& f.ShipName == cruShipCr_Filter
&& f.DestinationCr == destinationCr_Filter)
.ToList();
Here, if depPortCr_Filter
is -1
, then (depPortCr_Filter == -1 || f.DeparturePortID == depPortCr_Filter)
evaluates to true
, independently of f.DeparturePortID == depPortCr_Filter
condition.
Upvotes: 1
Reputation: 669
You can do it like
if (SailingMain_Details.Any(x => x.value == "any"))
{
// avoid the check here
SailingMain_Details = SailingMain_Details.Where(f => f.Duration == durationCr_Filter && f.DeparturePortID == depPortCr_Filter && f.CruiseLine == cruLineCr_Filter && f.ShipName == cruShipCr_Filter && f.DestinationCr == destinationCr_Filter).ToList();
}
else
{
SailingMain_Details = SailingMain_Details.Where(f => f.Duration == durationCr_Filter && f.DeparturePortID == depPortCr_Filter && f.CruiseLine == cruLineCr_Filter && f.ShipName == cruShipCr_Filter && f.DestinationCr == destinationCr_Filter).ToList();
}
Upvotes: 0
Reputation: 1685
The below might work if you want to skip the condition if the filter is "any"
SailingMain_Details =
SailingMain_Details.Where(f => (durationCr_Filter != "any" ? f.Duration == durationCr_Filter : true)
&& (depPortCr_Filter != "any" ? f.DeparturePortID == depPortCr_Filter : true)
&& (cruShipCr_Filter != "any" ? f.ShipName == cruShipCr_Filter : true)
&& (cruLineCr_Filter != "any" ? f.CruiseLine == cruLineCr_Filter : true)
&& (destinationCr_Filter != "any" ? f.DestinationCr == destinationCr_Filter : true)).ToList();
Upvotes: 2
Reputation: 10429
I assume here some parameter means it can be for any of those 5 params so you can try something like
SailingMain_Details = SailingMain_Details.Where(f => (f.Duration == durationCr_Filter || durationCr_Filter == "any")
&& (f.DeparturePortID == depPortCr_Filter || depPortCr_Filter == "any") &&
(f.CruiseLine == cruLineCr_Filter || cruLineCr_Filter == "any") && (f.ShipName == cruShipCr_Filter || cruShipCr_Filter == "any") &&
(f.DestinationCr == destinationCr_Filter || destinationCr_Filter == "any") ).ToList();
Upvotes: 0