2016-06-10 4 views
0
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 
    } 

Ich bin mit C# und EFLinq Abfrage mit negierten Zustand in Alle nicht das erwartete Ergebnis zurückkehr

Mit

Any(l2 => l2.Equals(l1)) 

ich a, b, c in Ausgabe

Mit

Any(l2 => !l2.Equals(l1)) 

Ich bekomme a, b, c, d, e, f in Ausgabe

Ich hatte erwartet, d, e, f

Was geschieht?

+2

Ich sehe keine Entity Framework verwendet hier sind. – Maarten

+0

Es tut, was Sie ihm gesagt haben: Für jedes Element in der Liste gibt es mindestens einen Enum-Wert, der nicht gleich diesem Element ist. –

Antwort

0

Sie hatten es fast, nur negieren Sie Ihre Bedingung. Versuche dies.

+0

Danke, das ist es! –

0

Es tut, was Sie gesagt haben: Für jedes Element in der Liste gibt es mindestens einen Enum-Wert, der nicht diesem Element entspricht.

Was Sie wahrscheinlich tun wollten (die Auswahl, die nicht im ENUM sind) ist:

var result = lista.Where(l1 => Enum.GetNames(typeof(prova)).All(l2 => !l2.Equals(l1))).ToList() 

für die die Elemente zu finden, alle Enum-Werte sind ungleich.

0

Was mit

Any(l2 => !l2.Equals(l1)) 

passiert ist, dass Sie immer true bekommen. Da Ihr aktuelles Element von lista immer nicht mit einem Element aus Ihrer Enum prova übereinstimmen wird. Fügen Sie einen Breakpoint auf !l2.Equals(l1) hinzu und Sie werden mehr wissen!

Wenn Sie beabsichtigen, von lista außer denen alle Elemente erhalten in Enum provea Sie sollten versuchen,

var enumNames = Enum.GetNames(typeof(prova)); 
lista.Where(l1 => !enumNames.Contains(l1)).ToList().ForEach(l => Console.WriteLine(l)); 
Verwandte Themen