Udaya
Udaya

Reputation: 307

How to avoid checking particular 'linq where clause' if that value is "any"?

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

Answers (6)

Daniel A Sathish Kumar
Daniel A Sathish Kumar

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

aspxsushil
aspxsushil

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

Michał Turczyn
Michał Turczyn

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

Gurpreet Kailey
Gurpreet Kailey

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

Gowri Pranith Kumar
Gowri Pranith Kumar

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

jitender
jitender

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

Related Questions