Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ-获取一组元素的最大值_Linq_Linq To Xml - Fatal编程技术网

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

LINQ-获取一组元素的最大值,linq,linq-to-xml,Linq,Linq To Xml,如何使用LINQ查询XML结构并获取属于特定元素的一组元素的最大值 例如,如果XML结构如下所示,我如何获得FullTicket、DayTicket和ChildTicket允许的最大年龄 <TicketTypes> <TicketType Name="FullTicket"> <AgeBands> <AgeBand> <Code>Adult1</Cod

如何使用LINQ查询XML结构并获取属于特定元素的一组元素的最大值

例如,如果XML结构如下所示,我如何获得FullTicket、DayTicket和ChildTicket允许的最大年龄

    <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>

你是说你想要最大值?(事实上这里已经有“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)
               });

我不想这么说Jon,你的代码中有个bug。x、 属性(“名称缺少结束引号”.因为是你,C#编译器会错误地把它捡起来。因此,你需要和Anders谈谈,告诉他C#规范需要重新编写,以便将来可以编译上述内容。嗨,Jon,你更大胆的建议是一个赢家。谢谢。不过我还有一个问题…说“TicketTypes”是属于“Day”元素的元素。因此,您可以有“Saturday”和“Sunday”元素,每个元素都包含一个“TicketTypes”元素,该元素包含多个“TicketType”元素。上面的查询将返回多个票证类型。我如何对您的查询进行分组,以返回整个周末每种票证类型的最大年龄。(即按TicketType分组的MaxAge)。谢谢。@FloatLeft:嗯,恐怕我必须单独考虑一下:)如果您使用相同类型的查询,但使用后代而不是元素(从更高的一级开始),然后添加一个
GroupBy(x=>x.Name)
,那可能就是您所要的。
var maxAges = ticketTypes
       .Elements("TicketType")
       .Select(x => new {
                  Name = (string) x.Attribute("Name"),
                  MaxMaxAge = x.Descendants("MaxAge").Max(y => (int) y)
               });