[英]Negate `.Where()` LINQ Expression
我知道您可以執行以下操作:
enumerable.Where(MethodGroup).DoSomething();
並且這實現了同樣的事情:
enumerable.Where(x => MyMethod(x)).DoSomething();
但是,我希望實現與此相反並選擇方法返回false的項目。 很明顯,第二種情況如何做到這一點:
enumerable.Where(x => !MyMethod(x)).DoSomething();
然而,對於第一個,情況並非如此,因為你無法應用!
運算符到MethodGroup
。 是否有可能以類似的方式使用MethodGroups
實現這種“ .WhereNot
”效果,還是我必須自己滾動(或使用lambdas)?
您可以創建一個輔助方法:
public static Func<T, bool> Not<T>(Func<T, bool> method)
{
return x => !method(x);
}
然后用法將與您想要的非常相似:
someEnumerable.Where(Not(MyMethod)).DoSomething();
您可以使用Except來實現此目的
yourList.Except(yourList.Where(MethodGroup)).DoSomething();
LINQ中提供的方法集沒有直接的方法。 即使你以某種方式實現了這一點,它也不會是一個有效的。
像你想象的那樣,需要像這樣做一個新的
public static IEnumerable<TSource> WhereNot<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
return source.Where(x => !predicate(x));
}
並使用它
var inverseResult = lst.WhereNot(MyMethod);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.