2010-02-03 5 views
1

J'essaie d'union aux requêtes pour créer un fichier XML. La requête elle-même fonctionne en tant que T-SQL, mais mon implémentation en tant que LINQ-TO-XML échoue avec l'erreur "Impossible de traduire l'expression ...".LINQ-TO-XML en utilisant UNION

Est-ce que je pose la mauvaise question? Cette approche est-elle fausse? Je suis nouveau à LINQ. Comment créer un seul XML à partir de 2 requêtes?

Dim db As New SOMEDataContext 

Dim members As New XElement("members", _ 
    (From c In db.Employees _ 
    Join cf In db.BowlingTeams On c.ID Equals cf.BowlingTeam_Text _ 
     Where c.DEPARTMENT = "Housewares" _ 
      Select New XElement("member", _ 
       New XElement("id", c.ID), _ 
       New XElement("title", c.TITLE))) _ 
    .Union(From e In db.Employees _ 
     Where e.DEPARTMENT = "Housewares" _ 
     Where e.POSITION Like "*XYZ*" _ 
      Select New XElement("member", _ 
       New XElement("id", e.ID), _ 
       New XElement("title", e.TITLE)))) 

Répondre

1

Voilà comment je ferais en VB:

Dim members = <members> 
         <%= From c In db.Employees _ 
          Join cf In db.BowlingTeams On c.ID Equals cf.BowlingTeam_Text _ 
          Where c.DEPARTMENT = "Housewares" _ 
          Select <member> 
            <id><%= c.ID %></id> 
            <title><%= c.TITLE %></title> 
           </member> %> 
         <%= From e In db.Employees _ 
          Where e.DEPARTMENT = "Housewares" _ 
          Where e.POSITION Like "*XYZ*" _ 
          Select <member> 
            <id><%= e.ID %></id> 
            <title><%= e.TITLE %></title> 
           </member> %> 
        </members> 

Cela profite de littéraux XML, ce qui évite la nécessité pour tous les appels New XElement.

0

Je pense que vous avez juste à faire quelque chose comme ça. Je ne sais pas si la syntaxe VB est correcte.

Dim query As From c In db.Employees Join cf In db.CourseFaculties On c.ID Equals cf.COURSEFACULTY_Text Where c.DEPARTMENT = "Housewares" Select New XElement("member", _ 
     New XElement("id", c.ID), New XElement("title", c.TITLE))).Union(From e In db.DATATEL_Employees Where e.DEPARTMENT = "Housewares" Where e.POSITION Like "*XYZ*" _ 
     Select New XElement("member", New XElement("id", e.ID), New XElement("title", e.TITLE))); 

    Dim members As New XElement("members"); 
    foreach (XElement result in query) 
     members.Add(result);