LINQ - получить максимальное значение группы элементов - PullRequest
0 голосов
/ 14 апреля 2011

Как я могу использовать LINQ для запроса структуры XML и получения максимального значения для группы элементов, принадлежащих определенному элементу.

Например, как я могу получить максимальный возраст, допустимый для FullTicket,DayTicket и ChildTicket, где структура XML выглядит следующим образом

    <TicketTypes>
      <TicketType Name="FullTicket">
        <AgeBands>
          <AgeBand>
            <Code>Adult1</Code>
            <MinAge>18</MinAge>
            <MaxAge>59</MaxAge>
          </AgeBand>
          <AgeBand>
            <Code>Adult2</Code>
            <MinAge>60</MinAge>
            <MaxAge>64</MaxAge>
          </AgeBand>
          <AgeBand>
            <Code>Adult3</Code>
            <MinAge>65</MinAge>
            <MaxAge>79</MaxAge>
          </AgeBand>
        </AgeBands>
      </TicketType>
      <TicketType Name="DayTicket">
        <AgeBands>
          <AgeBand>
            <Code>Adult2</Code>
            <MinAge>18</MinAge>
            <MaxAge>64</MaxAge>
          </AgeBand>
          <AgeBand>
            <Code>Adult3</Code>
            <MinAge>65</MinAge>
            <MaxAge>89</MaxAge>
          </AgeBand>
        </AgeBands>
      </TicketType>
      <TicketType Name="ChildTicket">
        <AgeBands>
          <AgeBand>
            <Code>Child</Code>
            <MinAge>3</MinAge>
            <MaxAge>17</MaxAge>
          </AgeBand>
          <AgeBand>
            <Code>Infant</Code>
            <MinAge>0</MinAge>
            <MaxAge>2</MaxAge>
          </AgeBand>
        </AgeBands>
      </TicketType>
    </TicketTypes>

Ответы [ 2 ]

1 голос
/ 14 апреля 2011

Вы имеете в виду, что хотите максимальное значение MaxAge?(Тот факт, что здесь уже есть «максимум», немного сбивает с толку.) Попробуйте что-то вроде этого:

// Find the FullTicket element
var fullTicket = ticketTypes.Elements("TicketType")
                     .Where(x => (string) x.Attribute("Name") == "FullTicket")
                     .First();

// Find the maximum value of any MaxAge element within FullTicket
var maxFullTicketAge = fullTicket.Descendants("MaxAge")
                                 .Max(x => (int) x);

Вы можете сделать то же самое для других типов билетов, или если вы чувствуете себя более смелым, выможет сделать что-то вроде:

var maxAges = ticketTypes
       .Elements("TicketType")
       .Select(x => new {
                  Name = (string) x.Attribute("Name"),
                  MaxMaxAge = x.Descendants("MaxAge").Max(y => (int) y)
               });
0 голосов
/ 14 апреля 2011
var values = from item in TicketTypes.Descendants("TicketType")
             from agebands in item.Descendants("AgeBands")
             from ageband in agebands.Descendants("AgeBand")
select item.Attribute("Name"), ageBand.MaxAge;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...