将Xpath语句集成到WCF服务的Linq查询中



您好,提前感谢您的帮助。我有一个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服务器上,我可以使用以下带有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查询中。有办法做到这一点吗?还是我做错了?再次感谢您的帮助。

问题是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到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;

最新更新