2016-05-23 3 views
0

Добрый день,запросов LINQ глубокие

Как я могу запросить следующий XML и, например, вернуть политику и расписание имен, если значение ResidenceIsSLP == «Нет».

Кроме того, этот формат XML/макет ОК или слишком глубокий, поскольку я, кажется, застреваю, когда пытаюсь сделать «глубже», чем 3 лева.

Я могу создать var и получить только политику, а оттуда создать другой var, а затем захватить более глубокие графики уровней, но есть ли способ сделать это из одного запроса?

Я думаю, что мне нужно выбрать новый и объединить два выбора, чтобы вернуть имя полиции и имя графика.

Заранее благодарим за любую помощь.

<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

Пробовали ли вы что-нибудь и получить ошибку или? –

ответ

2

Я думаю, что вы пытаетесь достичь это:

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

Использование двойной from вы получите декартово продукт между политикой и графиками, которые принадлежат.

+0

Удивительно, спасибо огромное! –

1

Я проанализирован весь XML Вы отправляли сообщение с помощью 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

Спасибо, этот метод также работает. –

Смежные вопросы