I'm not entirely sure I understand your question but I do think you've missed out on some of Breeze's capabilities.
Breeze will allow you to expose any client side query that will be applied on top of an existing arbitrary IQueryable on the server... and you can also pass in parameters that operate in concert with the merged query. For example:
On the server you can have an endpoint that looks like this:
[HttpGet]
public IQueryable<Employee> EmployeesFilteredByCountryAndBirthdate(DateTime birthDate, string country) {
return ContextProvider.Context.Employees.Where(emp => emp.BirthDate >= birthDate && emp.Country == country);
}
That can be queried from the client like this:
var q = EntityQuery.from("EmployeesFilteredByCountryAndBirthdate")
.withParameters({ birthDate: "1/1/1960", country: "USA" });
myEntityManager.executeQuery(q).then(function (data) {
... process the results.
}
You can even add a further filter the query so that it represents the application of both the server side logic as well as the client side filter. Something like:
var q = EntityQuery.from("EmployeesFilteredByCountryAndBirthdate")
.withParameters({ birthDate: "1/1/1960", country: "USA" })
.where("lastName", "startsWith", "S");
In general, I like to think of the client side query as simply a way of "further" restricting the data returned by whatever endpoint you have defined on the server. The server query can be a precise and focused as you want either for security or business logic consolidation purposes. The client side query simply allows you to further restrict the payload returned to whatever subset is useful to your use case.
The Breeze DocCode samples in the Breeze zip contain a number of useful examples like this.