簡體   English   中英

Lin中條件為否的Linq查詢未返回預期結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM