我有扩展方法:
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);
}
我需要更改参数字段来键入: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);
}
这个方法的调用是:
var query7 = query.WithFieldLike(trans => trans.DeviceModelNumber, "ber_3");
在这种情况下我应该如何构建“expr”?请帮忙。
最佳答案
解构 field
并创建一个新表达式,如下所示:
var expr = Expression.Lambda<Func<TResult, bool>> (
Expression.Call (field.Body, typeof (string).GetMethod ("Contains"),
Expression.Constant (value)), field.Parameters) ;
(根据 Maxs 在评论中的改进进行编辑)
关于c# - 将参数从 lambda 函数更改为 lambda 表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/677803/