将参数从lambda函数更改为lambda表达式

Max*_*axs 7 c# lambda

我有扩展方法:

public static IQueryable<TResult> WithFieldLike<TResult>(
   this IQueryable<TResult> query,
   Func<TResult, string> field,
   string value)
{
   Expression<Func<TResult, bool>> expr = 
       trans => field(trans).Contains(value);
   return query.Where(expr);
}
Run Code Online (Sandbox Code Playgroud)

我需要更改参数字段来键入:Expression>.会是这样的.

public static IQueryable<TResult> WithFieldLike<TResult>(
   this IQueryable<TResult> query,
   Expression<Func<TResult, string>> field,
   string value)
{
   Expression<Func<TResult, bool>> expr = ???
   return query.Where(expr);
}
Run Code Online (Sandbox Code Playgroud)

这种方法的调用是:

var query7 = query.WithFieldLike(trans => trans.DeviceModelNumber, "ber_3");
Run Code Online (Sandbox Code Playgroud)

在这种情况下我应该如何构建"expr"?请帮忙.

Ant*_*hyy 6

解构field并创建一个新的表达式,如下所示:

var expr = Expression.Lambda<Func<TResult, bool>> (
    Expression.Call (field.Body, typeof (string).GetMethod ("Contains"),
        Expression.Constant (value)), field.Parameters) ;
Run Code Online (Sandbox Code Playgroud)

(按照Maxs在评论中的细化编辑)