ShP*_*ShP 2 .net c# linq lambda
如果我的 linq 看起来像这样:
!new List<int>{1,2,3}.Contains(x.someColumn)
我想将其翻译为表达式,如下所示:
var mInfo = typeof (List<int>).GetMethod("Contains", new Type[] {typeof (int)});
var lst = new List<int>();
foreach (var a in f.Value.Split(','))
{
var b = int.Parse(a);
lst.Add(b);
}
var lConst = Expression.Constant(iList);
var b = Expression.Call(lConst,mInfo, propertyReference);
return Expression.Lambda<Func<TmpResult, bool>>(b, param);
Run Code Online (Sandbox Code Playgroud)
这会工作得像Contains,但如何改变它的样子!Contains呢?
如果我尝试用它包装它,Expression.Not则会出现错误:
The unary operator Not is not defined for the type System.Func
您可以在lambda 表达式的主体上使用该Expression.Not方法:
return Expression.Lambda<Func<TmpResult, bool>>(Expression.Not(b), param);
// ^ negate bodyRun Code Online (Sandbox Code Playgroud)
由于 lambda 表达式是一个函数,因此您不能对 lambda 表达式本身取反,只能对lambda 表达式的结果取反。