I'm assuming you're using ASP.NET / MVC...
First, take a look at this:
Second, when using the MVC Extensions, there are couple of things to note:
When a grid makes a request, you need to have your action look like this:
ActionResult GridData([DataSourceRequest]DataSourceRequest request)
var filters = request.Filters;
var sorts = request.Sorts;
Their filters all implement an IFilterDescriptor. There are 2 main types of filters: FiterDescriptor and CompositeFilterDescriptor. The FilterDescriptor describes a single filter (UserID~eq~1), a CompositeFilterDescriptor is used when composing filters with logical operators, it has a List<IFilterDescriptor> FilterDescriptors and a LogicalOperator properties. The default column filters that the grids send are CompositeFilterDescriptors even if they only contain a single filter and they come with a default LogicalOperator set to "and" but that's something you need to ignore if you don't have a second FilterDescriptor to join using the logical operator.
You can learn more by looking at the source of Kendo.Mvc.dll that comes with the MVC Extensions (or use JustDecompile to peek around). You want to see what they're doing with their IQueryable extensions.
We've implemented our own filtering in our Web API -based project and we convert the filters and sorts that come in from the grid to our own on-the-fly in our API Client class. I can try to help you out