Question

I am trying to implement the Like operator by using the entity framework query. But it seems Like doesn't appear to be supported on an int column.

Here is my query:

using (ObjectContext ctx = new ObjectContext(gbcDbConnection.eObjqueryConnection))
{
    string result = " Select ";
    result += "       master_factory.FACTORY_ID, master_factory.FACTORY_NAME,  ";
    result += "       case when master_factory.FACTORY_TYPE ='"  
           + gbvArticleVarieble.FactoryTypeExterIni+"' then '" 
           + gbvArticleVarieble.FactoryTypeExter+"' else '" 
           + gbvArticleVarieble.FactoryTypeInter+"' end as factory_type ";

    result += " FROM  ";
    result += "     LEWREDBEntities.[MASTER_FACTORY] as master_factory  ";


    result += " WHERE ";
    result += "      (master_factory.FACTORY_TYPE = @factoryType1 or master_factory.FACTORY_TYPE =@factoryType2) and master_factory.STATUS<>@status";


    if (searchVal != "")
    {
         result += "      AND master_factory.[FACTORY_ID]  LIKE '%' + @searchVal + '%' ";
    }



    ObjectQuery<DbDataRecord> query = ctx.CreateQuery<DbDataRecord>(result);
    query.Parameters.Add(new ObjectParameter("status", gbcDBVariable.DeleteIni));
    query.Parameters.Add(new ObjectParameter("factoryType1",gbvArticleVarieble.FactoryTypeExterIni ));
    query.Parameters.Add(new ObjectParameter("factoryType2", gbvArticleVarieble.FactoryTypeInterIni));
    if (searchVal != "")
    {
        query.Parameters.Add(new ObjectParameter("searchValue", searchVal));

    }
    if (logger.IsDebugEnabled)
    {
        query.ToTraceString();
    }

As you see, the Factory id is integer data type. When I execute it, it returns an error:

LIKE arguments must be of string type. Near member access expression

Did anyone else try this before?

Was it helpful?

Solution

You can probably use CAST, I'm not familiar with ESQL but:

AND CAST(master_factory.[FACTORY_ID] as System.String) LIKE '%' + @searchVal + '%'

This link gets all mushy: How to String Concatenation in Entity SQL?

this is more formal: http://msdn.microsoft.com/en-us/library/bb399172.aspx

Hope it helps.

OTHER TIPS

You said it yourself:

LIKE arguments must be of string type.

That's your answer :)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top