0

こんにちは、助けてくれてありがとう。ID(int)、server_info(xml)の2つの列を持つサーバーでホストされているSQLテーブルがあります。このテーブルの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データエンティティデータモデルとして表されます。Id番号を取得し、server_info列のxml内に埋め込まれている親ID値に基づいてサーバーテーブル内の子を検索する、WCFサービスを介して呼び出されるパラメーター化されたクエリが必要です。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;

        }

serviceメソッドの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;

またはプレーンなLinqtoXMLを使用する

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 に答える