Asp.net 如何使用linq搜索兄弟姐妹?

Asp.net 如何使用linq搜索兄弟姐妹?,asp.net,vb.net,linq,Asp.net,Vb.net,Linq,给定以下XML(在Excel XML数据表中有两行),我想找到所有成本值,并找到相关的AltID ... <Row ss:AutoFitHeight="0"> <Cell ss:StyleID="s62"><Data ss:Type="String" AltID="1" ColumnHeader="AltName">Alternative 2</Data></Cell> <Cell ss:StyleID="s

给定以下XML(在Excel XML数据表中有两行),我想找到所有成本值,并找到相关的AltID

...
   <Row ss:AutoFitHeight="0">
    <Cell ss:StyleID="s62"><Data ss:Type="String" AltID="1" ColumnHeader="AltName">Alternative 2</Data></Cell>
    <Cell ss:StyleID="s62"><Data ss:Type="Number" ColumnHeader="Total">0.105468638</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="Number" ColumnHeader="Cost">123</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="Number" ColumnHeader="Risk">456</Data></Cell>
   </Row>
   <Row ss:AutoFitHeight="0">
    <Cell ss:StyleID="s62"><Data ss:Type="String" AltID="2" ColumnHeader="AltName">Alternative 3</Data></Cell>
    <Cell ss:StyleID="s62"><Data ss:Type="Number" ColumnHeader="Total">1.7803949999999999</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="Number" ColumnHeader="Cost">123</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="Number" ColumnHeader="Risk">456</Data></Cell>
   </Row>
...
。。。
备选案文2
0.105468638
123
456
备选案文3
1.7803949999999999
123
456
...
我可以很容易地找到成本,但是我需要找到一种方法,用这个给定的成本,向上“升级”一级到,然后找到列标题等于AltName的单元格,然后给我AltID属性

    Dim costs = From item In dg...<Table>...<Row>...<Cell>...<Data> Select item Where item.@ColumnHeader = "Cost"
    For Each i In costs
        dim CostValue as Integer = i.value
        dim AltID as Integer = ...
    Next
Dim成本=来自dg中的项目。。。。。。。。。。。。选择项目所在的项目。@ColumnHeader=“成本”
对于每一个我都在花费
dim CostValue为整数=i.value
dim AltID为整数=。。。
下一个

您不需要使用三点来浏览每个元素。三点是。后代的简写。你可以把它简化为dg。。。只要您不关心数据节点在继承权中的位置。获得所需的节点后,可以使用Parent导航备份图形,然后根据需要再次向下导航。这将为您提供给定节点的AltID属性:

 Dim costs = From item In dg...<Data> 
    Where item.@ColumnHeader = "Cost"
    select item.Parent.Parent...<Data>.
               FirstOrDefault(Function(node) node.Attribute("ColumnHeader").Value = "AltName").@AltID
Dim costs=来自dg中的项目。。。
其中,@ColumnHeader=“成本”
选择项。父项。父项。。。。
FirstOrDefault(函数(节点)节点.Attribute(“ColumnHeader”).Value=“AltName”)。@AltID

或者,您可以使用祖先而不是.Parent.Parent来实现相同的目标。请参阅。

为什么要使用linq?为什么不使用简单的XPath查询?