J'essaie d'utiliser Dynamic Linq Expressions a > avec Linq à XML , mais avoir des problèmes avec des paramètres dynamiques.
Voici un exemple de requête de Dynamic Linq Wiki: p> dans mon cas, par exemple, j'essaie d'interroger la structure suivante: p> var query = XmlSource.Elements()
.AsQueryable()
.Select("new (FirstAttribute.Value as IP, FirstNode.toString() as OS)");
3 Réponses :
Pour récupérer l'attribut et l'élément décroissant, vous pouvez essayer ci-dessous le code:
string StringXML = @"<DataCenter> <Server IP='1.2.3.4'> <OS>Windows</OS> </Server> <Server IP='5.6.7.8'> <OS>Linux</OS> </Server> </DataCenter>"; XDocument Doc = XDocument.Parse(StringXML); var nodess = from Servers in Doc.Descendants("Server") select new{IP = Servers.Attribute("IP").Value , OS=Servers.Element("OS").Value} ; foreach(var node in nodess) { Console.WriteLine("ServerIP:"+node.IP + " ServerOS:" +node.OS); }
Merci, mais Sélectionnez CODE> doit être dynamique, je ne sais pas à l'avance quels éléments / attributs seront demandés
XDocument doc2 = XDocument.Parse(xml); var results = from s in doc2.Descendants("Server") select new { OsName = s.Element("OS").Value, IpAddress = s.Attribute("IP").Value };
J'utilise Dynamic Linq, je ne sais pas à l'avance quelle sera la condition ou les champs demandés. Si vous jetez un coup d'œil à l'exemple au bas de mes paramètres post-paramètres, des chaînes peuvent être construites
J'ai édité à mon post. Comme il est XML et que nous voulons les valeurs des éléments / attributs, pourquoi ne pas simplement saisir la valeur.
supposant que vous utilisez puisque la linq dynamique n'utilise pas les conversions implicites pour la recherche de méthode et ne comprend pas les conversions explicites, j'ai montré deux façons différentes de gérer la conversion de < Code> chaîne code> à si cela est possible pour l'élément system.linq.dynamic.core code>, vous pouvez ajouter
xname code> et
xelement code> sur les types accessibles < / em> ils vont donc fonctionner:
xName code> normalement effectué par la conversion implicite: p>
OS Code> Pour être manquant, vous devez tester pour
null code>. Malheureusement, je n'ai pas pu obtenir le prédicat code> np code> au travail: p>
Tu es un génie! Cela fonctionne comme un charme. J'ai 2 questions cependant: une: pourquoi nous passons un nom différemment à l'attribut et élément? Ou ça ne fait pas une différence sur laquelle nous convertissons la chaîne en xname? Et seconde - si l'attribut n'existe pas, je reçois NullReferenceException. Quel serait le meilleur endroit pour ajouter des sauvegardes à vérifier NULL? Merci!
@YuriyGalantter Je les ai transmises différemment pour montrer des moyens possibles de résoudre le manque de soutien de conversion implicite ou explicite dans Dynamic Linq. Utilisez ce que vous préférez.
@YuriyGalantter J'ai étendu ma réponse à l'élément manquant.
J'espère que vous pourrez m'aider avec un autre problème. Je peux exécuter avec succès la requête Dynamic Linq, mais lorsque j'essaie d'exporter des résultats à CSV à l'aide de cette méthode ( Hanselman .com / blog / ... ) Il est passé comme iSenumerable de type "objet" pour sorcière getProperties () ne renvoie rien. Existe-t-il un moyen d'énumérer les propriétés de l'article renvoyées par Dynamic Linq?
NM, je l'ai eu, merci!
Gee Merci pour le vocal et le vote rapproché. Quelle gentillesse de ta part.
Qu'essayez-vous d'accéder? Il n'y a pas besoin de
asquerisable code> ici.
@ Daniela.white Dynamic Linq Expressions construites sur le dessus de IQuerisable autant que je sache. J'essaie d'exécuter des questions sur des champs arbitraires fournis par l'utilisateur. J'ai ajouté l'exemple de Dynamic Linq Wiki.
@ Daniela.La réponse ci-dessous par Netmage est exactement ce que je demandais. Désolé d'être incertain.