繁体   English   中英

如何在选择查询中添加where子句

[英]How to add a where clause inside select query

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

是否可以在选择范围内执行此操作,或者我需要单独的查询?

这是使用查询语法的解决方案:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM