2

我有一个像这样工作的业务层调用:

CustomerRepository.Get(c => SqlFunctions.PatIndex("%" + arg + "%", c.FirstName));

我正在尝试使用表达式来构建它:

    public virtual IEnumerable<TEntity> Like(string LikeString, string Target)
    {
        MethodInfo method = typeof(SqlFunctions).GetMethod("PatIndex");
        var arg1 = Expression.Constant(LikeString);
        var item = Expression.Parameter(typeof(TEntity), "item");
        var prop = Expression.Property(item, Target);

        MethodCallExpression resultExp =
            Expression.Call(method, arg1, prop);

        var value = Expression.Constant(0, typeof(int?));

        var greaterThan = Expression.GreaterThan(resultExp, value);

        var lambda = Expression.Lambda<Func<TEntity, bool>>(greaterThan, item);

        var result = Repo<TEntity>.Get().AsQueryable().Where(lambda);

        return result;
    }

当我调用上述方法时,出现以下异常:

This function can only be invoked from LINQ to Entities.

关于如何克服这个问题或做我想做的事情的任何想法?我的表达式代码看起来没问题吗?

4

1 回答 1

1

想通了这个问题

从:

var result = Repo<TEntity>.Get().AsQueryable().Where(lambda);

至:

var result = Repo<TEntity>.Get(lambda);
于 2013-06-03T15:43:44.883 回答