0

您好,提前感谢您的帮助。我有一个托管在具有两列的服务器上的 sql 表:ID(int), server_info(xml) 此表中的 xml 条目如下所示:

<ServerID>11</ServerID><GroupID /><ParentID>15</ParentID><ServerName>IAProd1</ServerName><User>admin</User><UID>123</UID><PWD>password</PWD><Domain>TestDomain</Domain><Location>Left</Location>

此表在我的 Silverlight 应用程序中表示为 ADO.Net 数据实体数据模型。我想通过 WCF 服务调用一个参数化查询,该查询接受一个 Id 号,并根据嵌入在其 server_info 列的 xml 中的父 id 值在服务器表中查找子项。在 sql server 上,我可以使用带有 xpath 语句的以下查询来执行此操作:

<!--uses xpath statement in the where clause:(server_info.value('(ServerID)[1]', 'int') = 11) --> 
    SELECT     ID, server_info
    FROM         tbl_server_xml
    WHERE     (server_info.value('(ServerID)[1]', 'int') = 11) 

目前我的查询方法如下所示:

public List<tbl_server_xml> getChildServers(int parentId)
        {
            //create instance of Ado.Net entity
            xMonitorXMLTestDBEntities db = new xMonitorXMLTestDBEntities();
            var item = from entry in db.tbl_server_xml
                       where //need assistance with the where clause
                       select entry;

        }

我无法弄清楚如何仅使用服务方法中的 linq 查询或将 xpath 语句集成到 Linq 查询中的方法来执行等效操作。有没有办法做到这一点,还是我要解决这个问题?再次感谢您的帮助。

4

1 回答 1

1

问题是您server_info的 XML 文档内容不是有效的,因为它没有根元素。但是通过一个简单的技巧,您可以像这样编写查询

 var item = from entry in db.tbl_server_xml
                       where XDocument.Parse("<Root>" + entry.server_info + "</Root>").
                             XPathSelectElements("//ServerID[1]").Single().Value == "11"
                       select entry;

或使用普通的 Linq to XML

var item = from entry in db.tbl_server_xml
                           where XDocument.Parse("<Root>" + entry.server_info + "</Root>").
                                 Descendants("ServerID").First().Value == "11"
                           select entry;
于 2012-08-21T05:17:00.503 回答