2009-10-28 5 views
2

Nous avons un projet dans lequel accéder à la couche DB (MS SQL) avec LINQ. Pouvons-nous maintenant changer notre couche DB en fichier XML et toujours y accéder avec le même LINQ?Utilisation LINQ avec XML

Nous voulons ajouter la possibilité de stocker des données dans un seul fichier XML ou un ensemble de fichiers XML.

LINQ actuelle au code SQL ressemble à:

result = (from e in db.Organizations 
      where e.Id == idOrganization 
      select e).SingleOrDefault(); 

ou

result = (from e in db.Organizations 
      where e.Name.Trim().ToUpper() == organizationName.Trim().ToUpper() 
       && e.Id!=idCurrentOrganization 
      select e).Count()>0; 

Répondre

2

LINQ to SQL et LINQ to XML ont des similitudes, mais ils ne sont pas identiques. Les requêtes LINQ pourraient probablement être écrites afin qu'elles puissent être utilisées de la même manière, mais le code des requêtes elles-mêmes devrait probablement changer. Pourriez-vous donner quelques exemples de ce à quoi ressemble votre code LINQ to SQL actuel? Inclure des exemples du type de données que vous utilisez et de la manière dont vous souhaitez formater le XML aiderait probablement les gens à donner des indications plus précises.

Modifier: Votre première requête semble renvoyer un objet. Si votre LINQ to SQL et votre LINQ to XML retournent tous deux le même type, vous pouvez les échanger sans changer le code qui consomme le résultat.

Votre deuxième requête semble renvoyer un booléen, de sorte que le même concept s'applique à celui-ci. Le code ailleurs dans votre solution ne se souciera pas de savoir comment ce bool a été défini.

La suggestion de Mike d'utiliser une interface pour votre couche d'accès aux données est la meilleure solution. Pour vos 2 exemples, vous disposez d'une interface contenant un objet Organisation et un booléen. Vos implémentations SQL et XML seraient différentes, mais chaque autre partie de votre code aurait seulement besoin de savoir comment utiliser l'interface.

+0

Merci. Je vais ajouter des détails bientôt. – Sasha

1

Il y a une étape supplémentaire que vous devrez faire: vous devrez charger le XML dans un XDocument (ou un XNode si je me souviens bien) avant de pouvoir interroger vos données. Ensuite, il s'agit simplement de sélectionner des nœuds dans une arborescence avec la syntaxe LINQ to XML. Malheureusement, il n'y a pas de syntaxe LINQ qui vous permet d'interroger les deux et de vous permettre de brancher le XML ou le DB de façon transparente.

PS. Faites attention à l'espace de noms XML lorsque vous sélectionnez des noeuds, cela pourrait être un casse-tête!

PS2. Désolé je n'ai pas le code à portée de main

PS3. Je suggère votre couche de base de données pour obtenir à partir d'une interface, de cette façon vous serez en mesure de passer de XML à DB et vice-versa facilement

Hope this helps

+0

Merci. Je vais essayer de faire comme vous le dites dans PS3 – Sasha

+0

Vous êtes plus que bienvenue –