How can I specify conditions in Where predicates in LINQ without getting null reference exceptions. For instance, if q is an IQueryable how can I do like:
Expression<Func<ProductEntity,bool>> predicate = p => !search.CategoryId.HasValue || (search.CategoryId.HasValue && search.CategoryId == p.CategoryId);
var q2 = q.Where(predicate);
Here search is an object that holds possible search conditions that may or may not be set like search.CategoryId might not be set but if it is I want to get the products that are set by that condition.
When I do this I get null reference exceptions.
You can use the null-coalescing operator
??to replace a possible null value with a default value. The following sets tries to match the search.Category if it exists or simply creates an “always true” expression. This will be optimized by any good Linq query provider (e.g. LinqToSql).Another possibility would be to dynamically compose a query predicate using PredicateBuilder. That’s the way I do it for searches with a similar pattern as you use: