In order to subjectively query (based on the parameter), the accepted method would be to build the where clause in pieces as such:
var qry = session.QueryOver<obj>();
if (!String.IsNullOrEmpty(A)) { qry.Where(x => x.a == A); }
if (!String.IsNullOrEmpty(B)) { qry.Where(x => x.b == B); }
if (!String.IsNullOrEmpty(C)) { qry.Where(x => x.c == C); }
List<obj> data = qry.List<obj>().ToList();
So that the final result is the exact query to run for a given set of parameters, rather the generalized SQL query specified in the original post.