42 votes

Expression LINQ de base pour un ItemCollection

J'ai un ItemCollection que je voudrais interroger en utilisant LINQ. J'ai essayé l'exemple suivant (artificiel):

 var lItem =
    from item in lListBox.Items
    where String.Compare(item.ToString(), "abc") == true
    select item;
 

Visual Studio me dit toujours Cannot find an implementation of the query pattern for source type 'System.Windows.Controls.ItemCollection'. 'Where' not found. Consider explicitly specifying the type of the range variable 'item'.

Comment résoudre le problème?

84voto

Jon Skeet Points 692016

C'est parce que ItemCollection implémente uniquement IEnumerable , pas IEnumerable<T> .

Vous devez effectivement appeler Cast<T>() ce qui se produit si vous spécifiez explicitement le type de la variable de plage:

 var lItem = from object item in lListBox.Items
            where String.Compare(item.ToString(), "abc") == 0
            select item;
 

En notation par points, c'est:

 var lItem = lListBox.Items
                    .Cast<object>()
                    .Where(item => String.Compare(item.ToString(), "abc") == 0));
 

Si bien sûr, si vous avez une meilleure idée de ce qui est dans la collection, vous pouvez spécifier un type plus restrictif que object .

4voto

patjbs Points 1352

Vous devez spécifier le type "d'élément"

 var lItem =
    from object item in lListBox.Items
    where String.Compare(item.ToString(), "abc") == true
    select item;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X