J'essaie de faire une requête xlinq filtrante en c# 4.0, afin de pouvoir lier un DataContext. le code est le suivant
public IEnumerable<XElement> Filter(int min = 0, int max = int.MaxValue)
{
IEnumerable<XElement> selected = (
from x in xmlFile.Elements("Product")
where (int)x.Element("Price") >= min &&
(int)x.Element("Price") <= max
select x);
return selected;
}
xmlFile est un XElement avec un fichier xml externe chargé. La structure du fichier xml ressemble à ceci :
<Stock>
<Product>
<Name />
<Price />
<Quantity />
</Product>
...
</Stock>
Je n'obtiens aucune erreur lors de la construction ou de l'exécution, mais le fichier selected
n'obtient que null (même sans la clause where). Lorsque je passe la souris sur la variable lors du débogage, elle affiche le type System.Linq.Enumerable.WhereEnumerableIterator. Si je renvoie simplement le fichier xmlFile, tout se passe bien, mais j'ai vraiment besoin de faire le filtrage !
EDIT
D'après mes recherches, le problème se situe au niveau de l'instruction "xmlFile.Elements("Product")". Je ne sais pas comment l'expliquer, alors j'ai fait une capture d'écran (dans mon code, j'utilise en fait "Respuesto" à la place de "Products", je l'ai traduit ici pour que ce soit plus facile) :
(Je ne peux pas insérer d'image car je suis un nouvel utilisateur, mais elle est ici : http://i.stack.imgur.com/XTt8r.png
J'utilise cette fonction dans mon code en tant que DataContext comme suit :
gridpricelist.DataContext = Conn.Filter(min: Convert.ToInt32(minprice.Text),
max: Convert.ToInt32(maxprice.Text));
minprice et maxprice sont des zones de texte, et un événement KeyUp déclenche la fonction ci-dessus
EDIT2
J'ai trouvé la solution, voir ma réponse. Mais je n'arrive pas à expliquer pourquoi cela fonctionne ainsi, quelqu'un pourrait-il m'aider à comprendre ?
Merci d'avance !