2010-11-03 2 views
1

Quelqu'un sait s'il existe une manière plus propre/plus simple de faire l'équivalent?Existe-t-il un moyen plus propre/plus simple de faire un équivalent de WHERE IN (aa, bb, cc)?

En outre, tous les effets secondaires que je devrais surveiller?

var setters = from setterBase in Style.Setters 
       let setter = (setterBase as Setter) 
       let properties = new []{ HorizontalContentAlignmentProperty, VerticalContentAlignmentProperty } 
       where setter!=null && properties.Contains(setter.Property) 
       select setterBase; 

Jusqu'à présent, le meilleur je suis venu avec ...

Répondre

1

Il n'est pas nécessaire d'ajouter un tableau pour chaque setter.

var properties = new []{ 
    HorizontalContentAlignmentProperty, 
    VerticalContentAlignmentProperty }; 

var setters = from setter in Style.Setters.OfType<Setter>() 
       where properties.Contains(setter.Property) 
       select setter; 
+0

Merci de préciser que 'let' recrée le tableau à chaque fois, j'ai oublié celui-là ... Cela peut avoir un impact majeur selon la taille des deux collections ('properties' et 'setter') – smichaud

+0

Si les propriétés ont beaucoup taille à lui, pensez à utiliser un HashSet au lieu d'un tableau. –

0

Pas vraiment. Pour deux options, il est probablement plus lisible d'utiliser or, et vous pouvez utiliser OfType au lieu de la as -cast et d'abord let. OfType ne reviendra pas null éléments, donc vous pouvez supprimer ce filtre ainsi:

var setters = from setter in Style.Setters.OfType<Setter>() 
       where (setter.Property == HorizontalContentAlignmentProperty || 
        setter.Property == VerticalContentAlignmentProperty) 
       select setter; 
+0

Nice! Je réécrivais juste en utilisant OfType <>. Lorsque vous utilisez OfType, vous n'avez pas besoin de la vérification null, n'est-ce pas? –

+0

@Robert - Je ne suis pas sûr - la collection * pourrait * contenir 'null's, mais vous pouvez probablement l'enlever. – Kobi

+0

(setter! = Null) est redondant car null n'évaluera jamais être de type Setter. – Goblin

0

Je ferais cela. J'aime toujours avoir les propriétés dans un tableau pour supporter facilement plus de propriétés. Agréable!

var setters = from setter in Style.Setters.OfType<Setter>() 
       let properties = new []{ HorizontalContentAlignmentProperty, VerticalContentAlignmentProperty } 
       where properties.Contains(setter.Property) 
       select setter; 
Questions connexes