Cristian Boariu
Cristian Boariu

Reputation: 9621

linq - include where parameters

I have a strange question about Linq.

I have this query:

 var results = (from p in hotsheetDB.Properties
                           where p.PCode == pCode
                           && p.PropertyStatusID == propertyStatuses
                           orderby p.PropertyID descending
                           select new
                           {
                               PropertyId = p.PropertyID,
                               PCode = p.PCode,
                               PropertyTypeName = p.cfgPropertyType.Name,
                               FullAddress = p.Address1 + " " + p.Address2,
                               ZipCode = p.ZipCode.Code,
                               CityName = p.cfgCity.Name,
                               LivingSquareFeet = p.LivingSquareFeet,
                               LotSquareFeet = p.LotSquareFeet,
                               NumBedrooms = p.NumBedrooms,
                               NumBathrooms = p.NumBathrooms,
                               PropertyStatusName = p.cfgPropertyStatuse.Name
                           });

You notice pCode and propertyStatuses parameters. They are input values from the users. He wants to search by pCode or/and by propertyStatuses.

So, when the user fills in only pCode he wants to return all the records with that pCode having ANY propertyStatuses...well, because propertyStatuses IS in the query but it's null, the query will not return anything (because there is no record with empty(null) propertyStatuses...

Therefore, the question: is there any way to include these where params only whey they have values? (without making separate N queries with all the combination? (I have multiple inputs)

Thanks in advance..

Upvotes: 0

Views: 503

Answers (2)

Billy
Billy

Reputation: 2630

I'm only guessing here but try:

where p.PCode == pCode && 
(p.PropertyStatusID == null || p.PropertyStatusID == propertyStatuses)

Upvotes: 0

Johannes Petzold
Johannes Petzold

Reputation: 418

You could change your where clause to make the parts which include null always return true.

For example:

where (pCode == null || p.PCode == pCode)
   && (propertyStatuses == null || p.PropertyStatusID == propertyStatuses)

Upvotes: 1

Related Questions