2010-02-03 112 views
1

我想联合查询来创建一个XML文件。查询本身就像T-SQL一样工作,但是我的作为LINQ-TO-XML的实现失败,出现“Could not translate expression ...”错误。使用UNION的LINQ-TO-XML

我问错了吗?这种方法是错的吗?我是LINQ的新手。如何从2个查询创建单个XML?

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)))) 

回答

1

这是我会怎么做,在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> 

这需要XML文本,它避免了所有的New XElement调用需要的优势。

0

我想你只需要做这样的事情。不确定VB语法是否正确。

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);