如何使用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>
答案 0 :(得分:1)
你的意思是你想要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)
});
答案 1 :(得分:0)
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;