I have a linq query. I have a bunch of parameters from a form I collect where I need to filter based of fields the user is searching for.
IQueyable<Users> user = from user in edmxObject.Users
where user.FirstName.Contains(model.FirstName ?? user.FirstName)
&& user.UserName.Contains(model.UserName ?? user.UserName)
I have a few more non string field filters I need to filter including long and boolean. They could be nulls if the user does not select anything. How do I include them in the query.
This is one of the best examples of why LINQ is so powerful - deferred execution. You can build up the query in different phases, and only when the query is finally executed or resolved will the SQL statement be generated:
var query = edmxObject.Users.AsQueryable<Users>();
if (! String.IsNullOrEmpty(model.FirstName)) {
query = from user in query
where user.FirstName.Contains(model.FirstName)
select user;
}
if (! String.IsNullOrEmpty(model.UserName) {
query = from user in query
where user.UserName.Contains(model.UserName)
select user;
}
// this will cause the query to execute get the materialized results
var result = query.ToList();
If the query doesn't include a particular field, you don't need to include it as part of the where clause at all:
IQueyable<Users> user = from user in edmxObject.Users;
if (model.FirstName != null)
users = users.Where(user => user.FirstName.Contains(model.FirstName)
if (/* age is searched for */)
users = users.Where(user => user.Age == model.Age);
You can conditionally nest predicates this way to ensure you have only the conditions you really need.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With