[英]Linq query with negated condition in Any not returning the expected result
class Program
{
static void Main(string[] args)
{
List<string> lista = new List<string>()
{
"a",
"b",
"c",
"d",
"e",
"f"
};
lista.Where(l1 => Enum.GetNames(typeof(prova)).Any(l2 => l2.Equals(l1))).ToList().ForEach(l => Console.WriteLine(l));
Console.ReadLine();
}
}
public enum prova
{
a,
b,
c
}
我正在使用C#和EF
用
Any(l2 => l2.Equals(l1))
我的輸出是a,b,c
用
Any(l2 => !l2.Equals(l1))
我在輸出中得到a,b,c,d,e,f
我期待d,e,f
怎么了?
您幾乎擁有了它,只是否定了您的where條件。 嘗試這個。
lista.Where(l1 => !Enum.GetNames(typeof(prova)).Any(l2 =>l2.Equals(l1)));
它按照您的指示進行操作:對於列表中的每個元素,至少有一個不等於該元素的枚舉值。
您可能想做的事情(選擇不在枚舉中的那些):
var result = lista.Where(l1 => Enum.GetNames(typeof(prova)).All(l2 => !l2.Equals(l1))).ToList()
查找所有枚舉值不相等的元素。
發生了什么事
Any(l2 => !l2.Equals(l1))
是的,您將永遠成true
。 因為您來自lista
的當前元素將始終不等於來自enum prova
某些元素。 在!l2.Equals(l1)
上添加一個斷點,您將了解更多!
如果您打算從lista
獲取所有元素(枚舉provea
的元素除外),則應嘗試
var enumNames = Enum.GetNames(typeof(prova));
lista.Where(l1 => !enumNames.Contains(l1)).ToList().ForEach(l => Console.WriteLine(l));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.