2016-05-23 8 views
0

良い一日、LINQクエリ、複数レベル

は、どのように私は次のXMLを照会し、例えば、もしResidenceIsSLP値==「いいえ」ポリシーおよびスケジュールの名前を返すことができます。

さらに、このXMLフォーマット/レイアウトはOKでも深すぎるのですか?3つのレベルよりも「深い」を試してみると固まってしまうようです。

varを作成してポリシーを取得し、そこから別のvarを作成してより深いレベルのスケジュールを取得することはできますが、単一のクエリから実行する方法はありますか?

私は新しく選択して、警察名とスケジュール名を返すことができるように2つの選択肢を組み合わせる必要があると思っています。

ありがとうございました。あなたが属するポリシーおよびスケジュール間のデカルト積を取得するダブルfromを使用して

var result= from e in doc.Decendants("Policy") 
      from s in e.Decendants("Schedule") 
      where s.Element("ResidenceIsSLP").Value=="No" 
      select new { 
          PolicyName= (string)e.Element("PolicyName"), 
          ScheduleName= (string)s.Element("ScheduleName") 
         }; 

<Config> 
    <Policies> 
     <Policy Number="3"> 
      <PolicyName>AD_EXCHANGE</PolicyName> 
      <General> 
      <PerformSnapshot>Enabled</PerformSnapshot> 
      <DataClassification>Platinum</DataClassification> 
      </General> 
      <Clients> 
      <Client Number="1"> 
       <ClientHostname>BORHOMBX</ClientHostname> 
       <ClientHardware>Windows-x64</ClientHardware> 
       <ClientOS>Windows</ClientOS> 
       <ClientPriority>0</ClientPriority> 
      </Client> 
      </Clients> 
      <Schedules> 
      <Schedule Number="1"> 
       <ScheduleName>AD_PLATINUM_DAILY_FULL</ScheduleName> 
       <ResidenceIsSLP>Yes</ResidenceIsSLP> 
      </Schedule> 
      <Schedule Number="2"> 
       <ScheduleName>AD_PLATINUM_MONTHLY_FULL</ScheduleName> 
       <ResidenceIsSLP>Yes</ResidenceIsSLP> 
      </Schedule> 
      </Schedules> 
     </Policy> 
    </Policies> 
</Config> 
+2

を使用して、あなたが掲示全体のXMLを解析または? –

答えて

2

は、私が何を達成しようとしていることはこれだと思います。

+0

すごくおかげさまで! –

1

私はあなたが何をしようとすると、エラーを取得しましたXMLのLINQに

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 
      var results = doc.Descendants("Policy").Select(x => new { 
       number = (int)x.Attribute("Number"), 
       name = (string)x.Element("PolicyName"), 
       performSnapshot = (string)x.Descendants("PerformSnapshot").FirstOrDefault(), 
       dataClassification = (string)x.Descendants("DataClassification").FirstOrDefault(), 
       clients = x.Descendants("Client").Select(y => new { 
        number = (int)y.Attribute("Number"), 
        clientHostname = (string)y.Element("ClientHostname"), 
        clientHardware = (string)y.Element("ClientHardware"), 
        clientOS = (string)y.Element("ClientOS"), 
        clientPriority = (int)y.Element("ClientPriority"), 
       }).ToList(), 
       schedule = x.Descendants("Schedule").Select(y => new { 
        number = (int)y.Attribute("Number"), 
        scheduleName = (string)y.Element("ScheduleName"), 
        residenceIsSLP = (string)y.Element("ResidenceIsSLP") 
       }).ToList() 
      }).ToList(); 
     } 
    } 
} 
+0

ありがとうございます。この方法も機能します。 –

関連する問題