[英]Linq Expressions and “Not Contains” query
如果我有如下所示的linq: !new List<int>{1,2,3}.Contains(x.someColumn)
我想將其轉換為Expression,所以像這樣:
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);
這將像“ 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 body
由於lambda表達式是一個函數,因此您不能否定lambda表達式本身 ,而只能否定lambda表達式的結果 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.