2010-10-30 8 views
1

J'essaie d'obtenir des valeurs de xml, et j'ai un problème avec la valeur vide. J'utilise cette requête pour obtenir toutes les valeurs non vides de Attribute « Rodz », et ce code fonctionne, mais il me renvoyer des valeurs vides aussi:/Problème avec la requête linq avec la valeur vide

XDocument loaded = XDocument.Load(@"c:\TERC.xml"); 

var q = (from c in loaded.Descendants("catalog") 
        from r in c.Descendants("row") 
        select r.Descendants("col").Where(col1 => 
          col1.Attribute(XName.Get("name")).Value == 
          "RODZ").Where(kc => kc.ToString() != "").FirstOrDefault().Value ?? "0").ToList(); 

Tis est un gros problème pour moi parce que je suis doit analyser toutes les valeurs int, et cette requête ne fonctionne pas:

var q = (from c in loaded.Descendants("catalog") 
        from r in c.Descendants("row") 
        select int.Parse(r.Descendants("col").Where(col1 => 
          col1.Attribute(XName.Get("name")).Value == 
          "RODZ").Where(kc => kc.ToString() != "").FirstOrDefault().Value ?? "0") 

       ).ToList(); 

Je veux obtenir 0 lorsque la valeur est nulle, parce que je convertir plus tard à Enum.

Voyez-vous ce qui fonctionne avec ce code?

<?xml version="1.0" encoding="UTF-8" ?> 
<teryt> 
<catalog name="Compix"> 
<row> 
    <col name="NAME">Name1</col> 
    <col name="ID"/> 
    </row> 
<row> 
    <col name="NAME">Name2</col> 
    <col name="ID">1</col> 
    </row> 
<row> 
    <col name="NAME">Name3</col> 
    <col name="RODZ">2</col> 
    </row> 
</catalog> 
</teryt> 

Répondre

1

Votre problème est dans ce bit:

where(kc => kc.ToString() != "") 

changement à:

where(kc => !string.IsEmptyOrNull(kc.Value)) 
+0

Je vois :) mais maintenant FirstOrDefault() Valeur me donne exceptiom, lorsque la valeur est nulle. . Je ne suis pas bon avec linq:/ – user278618

+0

Mis à jour. Utilisez IsEmptyOrNull. – Aliostad