2010-12-14 61 views
1

Je développe l'application de Windows Phone 7. J'utilise XML comme base de données pour mon application. J'utilise un fichier XML au lieu d'une table de base de données pour mon application. J'ai la structure suivante pour un de mes fichiers xml.Comment écrire l'ID dans le fichier XML pour le premier enregistrement en utilisant LINQ to XML?

<?xml version="1.0" encoding="utf-8" ?> 
<Categories> 
    <Category> 
    <Category_ID></Category_ID> 
    <Category_Name></Category_Name> 
    <TransactionType_ID></TransactionType_ID> 
    </Category> 
    <Category> 
    <Category_ID></Category_ID> 
    <Category_Name></Category_Name> 
    <TransactionType_ID></TransactionType_ID> 
    </Category> 
</Categories> 

Dans le fichier XML ci-dessus, je suis l'insertion des valeurs pour Category_Name & TransactionType_ID via l'interface utilisateur de mon application mobile en utilisant LINQ to XML. Dans le fichier XML ci-dessus, je traite le Category_ID comme une clé primaire & TransactionType_ID en tant que clé étrangère appartenant à un autre fichier xml. Dans le fichier XML ci-dessus, je veux générer l'ID autoincrement pour le noeud Category_ID comme nous le faisons dans la table de base de données. A cet effet, je suis en utilisant le code suivant

private int new_record_id() 
     { 
      IsolatedStorageFile isstore = IsolatedStorageFile.GetUserStoreForApplication(); 
      IsolatedStorageFileStream bookfile = new IsolatedStorageFileStream("Categories.xml", System.IO.FileMode.Open, isstore); 

      XDocument xmldetails = XDocument.Load(bookfile);   

      var details = (from detail in xmldetails.Descendants("Category") 
          select (int.Parse(detail.Element("Category_ID").Value))).Max(); 


      bookfile.Close(); 

      return details + 1; 
     } 

Mais quand j'insérer premier enregistrement dans le fichier XML il donne erreur dans la phrase suivante parce qu'il n'y a pas d'enregistrement dans mon fichier XML au début. Pouvez-vous s'il vous plaît me fournir un code ou un lien ou une solution à travers laquelle je peux insérer le premier enregistrement dans le fichier XML? Si je fais quelque chose de mal alors s'il vous plaît me guider.

Répondre

1

Eh bien, pour commencer par votre requête peut être écrit beaucoup plus simplement:

var id = xmlDetails.Descendants("book") 
        .Max(x => (int) x.Element("id")); 

Maintenant, si vous voulez être en mesure de traiter le cas où il sont pas de livres dans votre XML, je d » essai qui explicitement d'abord:

int id; 
if (xmlDetails.Descendants("book").Any()) 
{ 
    id = xmlDetails.Descendants("book") 
        .Max(x => (int) x.Element("id")); 
} 
else 
{ 
    id = -1; // Or whatever you want to do 
} 

(vous pouvez utiliser l'opérateur conditionnel pour cela si vous voulez, aussi.)