Search code examples
c#servicestackormlite-servicestack

Adding conditions on complex properties with ServiceStack AutoQuery


I need to add filtering to my API requests that support AutoQuery, so based on this SO answer, used q.And to add conditions. The issue is that one of the POCO properties is a List<string> and it seems doing a simple Contains() won't work. Here's a simple example of what I have:

public class PocoObject
{
    public int Id { get; set; }
    public List<string> Names { get; set; }
}

My service looks like this:

public object Get(PocoObjects request)
{
    var q = AutoQuery.CreateQuery(request, Request.GetRequestParams());
    if (someCondition)
    {
        q.And(x => x.Names.Contains(request.TargetName));
    }
    return AutoQuery.Execute(request, q);
}

Problem is, I get an error like this:

 variable 'x' of type 'TestProject.ServiceModel.Types.PocoObject' referenced from scope '', but it is not defined

If I change the Contains to a simpler equality comparison on another property, the AutoQuery works. Any ideas how to accomplish this?


Solution

  • You can't do a server side SQL query on a blobbed complex type property like List<string>. Any queries need to be applied on the client after the results are returned from the db and its deserialised back into a typed POCO.