Do not call Union when one of the arguments is null.
What does “zero request” mean to you? If this means “no lines”, just don't combine it. If this means “all rows,” you don’t need to concatenate because you can just take a basic, unfiltered query.
Like this:
var result = new [] { q1, q2, q3, q4, }.Where(query => query != null).Aggregate(Queryable.Union);
This is using LINQ-to-Objects to build a LINQ-to-SQL query.
A new version:
var result = dataContext.Persons.Where(_ => false); if(q1 != null) result = result.Union(q1); if(q2 != null) result = result.Union(q2); if(q3 != null) result = result.Union(q3); if(q4 != null) result = result.Union(q4);
The SQL Server Query Optimizer will delete the first dummy query, so it has no time to start up at all.
source share