2
<PersVeh id="V0001" LocationRef="L0001" RatedDriverRef="D0001">
  <Manufacturer>FORD</Manufacturer> 
  <Model>TAURUS SE</Model> 
  <ModelYear>2007</ModelYear> 
  <VehBodyTypeCd>PP</VehBodyTypeCd> 
  <POLKRestraintDeviceCd>E</POLKRestraintDeviceCd> 
  <EstimatedAnnualDistance>
    <NumUnits>011200</NumUnits> 
  </EstimatedAnnualDistance>
  <VehIdentificationNumber>1FAFP53U37A160207</VehIdentificationNumber> 
  <VehSymbolCd>12</VehSymbolCd> 
  <VehRateGroupInfo>
    <RateGroup>16</RateGroup> 
    <CoverageCd>COMP</CoverageCd> 
  </VehRateGroupInfo>
  <VehRateGroupInfo>
    <RateGroup>21</RateGroup> 
    <CoverageCd>COLL</CoverageCd> 
  </VehRateGroupInfo>

私はLinqを初めて使用するので、単純な問題である場合とそうでない場合があることについて、誰かが私を助けてくれることを望んでいます。

上記のxmlサンプルでは、​​次のコードを使用しています。

var result = from item in doc.Descendants(n + "PersVeh")
             where item.Attribute("id").Value == "V0001"
             select new
             {
                RatedDriverRef = (string)item.Attribute("RatedDriverRef"),
                LocationRef = (string)item.Attribute("LocationRef"),
                ModelYear = (string)item.Element(n + "ModelYear") ?? "9999",
                VehBodyTypeCd = (string)item.Element(n + "VehBodyTypeCd") ?? "XX",
                POLKRestraintDeviceCd = (string)item.Element(n + "POLKRestraintDeviceCd") ?? "0",
                EstimatedAnnualDistance = (string)item.Element(n + "EstimatedAnnualDistance").Element(n + "NumUnits") ?? "999999",
                VehIdentificationNumber = (string)item.Element(n + "VehIdentificationNumber") ?? "VIN not found",
                VehSymbolCd = (string)item.Element(n + "VehSymbolCd") ?? "00"
             };

私が抱えている問題は、VehRateGroupInfoノードにあります。CoverageCdに基づいてRateGroup番号を抽出する必要があります。

言い換えれば、このようなもの:

CompSymbol = item.Element(n + "VehRateGroupInfo").Element(n + "RateGroup").Value
             where item.Element(n + "VehRateGroupInfo").Element(n + "CoverageCd").Value == "COMP"

select内でこれを行うことは可能ですか、それとも別のクエリが必要ですか?

4

1 に答える 1

0

クエリ構文を使用したソリューションは次のとおりです。

CompSymbol = (from vehRateGroup in item.Descendants(n + "VehRateGroupInfo")
              where vehRateGroup.Element(n + "CoverageCd").Value == "COMP"
              select vehRateGroup.Element(n + "RateGroup").Value).Single()

メソッド構文を使用した同様のソリューションは次のとおりです。

CompSymbol = item.Descendants(n + "VehRateGroupInfo")
                 .Single(x => x.Element(n + "CoverageCd").Value == "COMP")
                 .Element(n + "RateGroup").Value
于 2012-10-19T01:39:22.903 に答える