6
Załóżmy, że mam następujące wyliczenie.Jak wygenerować wyrażenie dynamiczne za pomocą operatora bitowego i wylicza?
[Flags] public enum Color { Red = 1, Blue = 2, Green = 4 }
Teraz chcę użyć następującego zapytania, aby znaleźć czerwone koszule.
Shirts.Where(x => (x.Color & Color.Red) != 0)
I to działa dobrze, ale gdy próbuję skonstruować to dynamicznie:
var color= Expression.Constant(Color.Red);
var property = Expression.Property(Expression.Parameter(typeof(Shirt)), "Color");
Expression.NotEqual(Expression.And(property, color), Expression.Constant(0));
pojawia się następujący wyjątek:
Operator binarny i nie jest zdefiniowany dla typy "MyEnums.Color" i "MyEnums.Color".
Używam .NET 4.5
Wszelkie myśli?
+1 do kompleksowego budynku ekspresji. Zawsze możesz zobaczyć strukturę Wyrażenia używając LINQPad 'Dump' dla' Wyrażenie> exp = shirt => shirt.Color & Color.Red; ' –
Wow, to było szybkie i działa też:) –
@ IvanMilutinović Cieszę się, że działa - minęło kilka lat, odkąd potrzebowałem tej metody i napisałem ją z pamięci tylko ...: o :) –