LINQ-获取一组元素的最大值

| 如何使用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>
    
已邀请:
您的意思是您想要MaxAge的最高价值? (这里已经有\“ max \”的事实有点令人困惑。)请尝试如下操作:
// 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)
               });
    
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;
    

要回复问题请先登录注册