Is there an operator for "NOT LIKE"

Posts   
 
    
mrbelk
User
Posts: 5
Joined: 08-Feb-2011
# Posted on: 18-Jul-2011 20:42:26   

What is the accepted best practice for specifying a predicate for "NOT LIKE" using the Adapter pattern?" I don't see an operator for it (although !% would be pretty cool if it were possible).

Do we have to create a "FieldLikePredicate" like this:

new FieldLikePredicate(EntityField2, null, patternToMatch, true)

?

Thanks, -MrB

daelmo avatar
daelmo
Support Team
Posts: 8245
Joined: 28-Nov-2005
# Posted on: 19-Jul-2011 04:44:41   

All these options are valid:

// not like (negate the like clause)
var filter1 = new RelationPredicateBucket(
    new FieldLikePredicate(CustomerFields.CustomerId, null, "A%", true));               
adapter.FetchEntityCollection(customers, filter1);

// not like api2 (negate the predicaste)
customers.Clear();
var filter2 = new RelationPredicateBucket();
var likeClause2 = new FieldLikePredicate(CustomerFields.CustomerId, null, "A%", false);
likeClause2.Negate = true;
filter2.PredicateExpression.Add(likeClause2);               
adapter.FetchEntityCollection(customers, filter2);
// not like api3 (natural language filter construction)
var filter3 = new RelationPredicateBucket(
     !(CustomerFields.CustomerId % "A%"));
adapter.FetchEntityCollection(customers, filter3);
// not like custom dbfunctioncall
var filter4 = new RelationPredicateBucket(
    new FieldCompareExpressionPredicate(
        CustomerFields.CustomerId
        .SetExpression(
            new DbFunctionCall("{0} NOT LIKE {1}", new object[]{ CustomerFields.CustomerId, "A%" })), 
            null, ComparisonOperator.None, null));
adapter.FetchEntityCollection(customers, filter3);
// not like linq
var metaData = new LinqMetaData(adapter);
var customersLinq = (from c in metaData.Customer
                    where !c.CustomerId.StartsWith("A")
                    select c).ToList();
// using QuerySpec
var qf = new QueryFactory();
var q = qf.Customer.Where(CustomerFields.CustomerId.StartsWith("A"));
var results = adapter.FetchQuery(q);
David Elizondo | LLBLGen Support Team