日期:2014-05-20  浏览次数:20705 次

使用Expression创建动态查询并自定义like方法时,提示“不识别该方法,因此无法转换为存储表达式”
我在wcf ria中创建了动态查询数据库的方法,并利用自定义的like方法实现模糊识别,但是在调用时却提示:
引用
Load operation failed for query 'getProMainenancesBySearch'. LINQ to Entities 不识别方法“Boolean like(System.String, System.String)”,因此该方法无法转换为存储表达式。


下面是wcf ria 中的代码:

[Query]
public IQueryable<ProMainenance> getProMainenancesBySearch(string queryField, string queryValue)
{
    //s.[queryFiled]
    ParameterExpression param = Expression.Parameter(typeof(ProMainenance), "s");
    Expression selector = Expression.Property(param, typeof(ProMainenance).GetProperty(queryField));
    Expression constant = Expression.Constant(queryValue);
    Expression filter = Expression.Call(typeof(VehicleService).GetMethod("like", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public), selector, constant);
    Expression<Func<ProMainenance, bool>> pred = Expression.Lambda<Func<ProMainenance, bool>>(filter, param);
    return this.ObjectContext.ProMainenances.Where(pred);
}

static bool like(string a, string b)
{
    return a.Contains(b);
}


请求大哥大姐们解答呀,thx!
------解决方案--------------------
这种代码自己搜下,很容易找到

http://www.cnblogs.com/JimmyZheng/archive/2012/02/23/2364154.html