2009-12-02 5 views
1

J'ai une table de base de données avec des transactions. Dans l'un des champs, il y a un message XML, le type de champ est "xml". Dans ce fichier XML, un employé est classé et c'est ce champ que j'ai besoin de chercher. Je souhaite récupérer toutes les lignes correspondant au numéro d'employé fourni lors de l'exécution. Est-il possible de faire cela avec Linq?Recherche dans les tables XML classées à l'aide de Linq, cela peut-il être fait?

Voici un exemple de code XML provenant d'une des lignes de la table de transactions. Le champ s'appelle "Message". J'ai besoin de regarder la valeur "employee" et retourner la ligne si elle correspond à ce qui a été fourni par l'utilisateur.

<interface> 
    <mac>1452345234</mac> 
    <device>device1</device> 
    <id>1234567</id> 
    <terminal> 
    <unit>1</unit> 
    <trans> 
     <event>A3</event> 
     <employee>3333</employee> 
     <time>2008-10-02T11:41:00.0000000+00:00</time> 
    </trans> 
    </terminal> 
</interface> 
+0

Voulez-vous filtrer les résultats dans la base de données ou dans l'application? –

+1

Voir http://stackoverflow.com/questions/282391/can-linq-to-sql-query-an-xml-field-db-serverside –

+0

Je devrais mentionner que j'utilise des entités et que je veux filtrer dans l'application. – Retrocoder

Répondre

1

Oui, il est facilement possible avec LINQ:

var matchList = from t in transactions 
       where XDocument.Load (new StringReader (t.Message)) 
           .Descendants ("employee") 
           .Count (node => node.Value == employeeNr) > 0 
       select t; 
0

façon simple:

List<YourRecord> GetRecords(string EmployeeId) 
{ 
    return TheTable.where(r => r.Message.Contains("<employee>" + empId + "</employee>")).ToList(); 
} 
+0

Malheureusement, votre solution donne l'erreur suivante: "Conversion implicite non autorisée du type de données xml au type de données nvarchar, table" transactions ", colonne" Message ". Utilisez la fonction CONVERT pour exécuter cette requête. "Toute idée comment je devrais utiliser la fonction" CONVERT "? – Retrocoder

+0

J'aurais dû mentionner que j'utilise Entities – Retrocoder