首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Where命令,8

Where命令,8
EN

Stack Overflow用户
提问于 2014-10-18 16:49:54
回答 2查看 53关注 0票数 0

我可以在不使用where命令的情况下获得以下提要,当我将where命令放入其中时,我无法使它工作。

1231是routeId可以成为的值,也是routeId在获得select命令时的值。

有什么原因导致失败吗?

还曾尝试:

代码语言:javascript
复制
where s.Element("routeId").Value.Contains("1231") 

代码语言:javascript
复制
where s.Attribute("routeId").Value == "1231"

代码语言:javascript
复制
where s.Element("routeId").Value == ("1231")

当前代码:

代码语言:javascript
复制
var routeNames = (from n in doc.Descendants(ns + "Service") 
                    select new RootContainer
                    {
                        Service = (from s in n.Element(ns + "routes").Elements(ns + "Route")
                        // where (n.Elements(ns + "timetables").Elements(ns + "Timetable").Elements(ns + "daysOfWeek").ToString() == "Sundays and Public Holidays from 14 September")

                        where s.Element("routeId").Value == "1231"
                        select new Services
                        {
                            RouteName = s.Element(ns + "routeName").Value, RouteId = s.Element(ns + "routeId").Value,
                            // Routes = s.Element(ns + "routeId").Attribute("1231").Value


                            //  TimetableName = s.Element(ns + "timetables").Element(ns + "Timetable").Element(ns + "daysOfWeek").Value,


                        }).ToList()

                    }).First();

这是完整的XML。

我的目标是得到每一个时间表:星期一到星期五,星期六和星期日.或大意的文字,因为这改变了这个提要中包含的内容。

代码语言:javascript
复制
   <Service z:Id="i1" xmlns="http://schemas.datacontract.org/2004/07/BusExpress.ClassLibrary"    xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">

 <routes>
  <Route z:Id="i4">
     <routeId>1231</routeId>
  <routeMap>
    <RouteMap z:Id="i6">

      <routeLineCenterLat>50.82754</routeLineCenterLat>
      <routeLineCenterLng>-0.166640326</routeLineCenterLng>
      <routeLineColour>#0000FF</routeLineColour>
      <routeLineFilename i:nil="true" />
      <routeLineInitialZoom>12</routeLineInitialZoom>
      <routeMapId>379</routeMapId>
      <routeMapName>1 Whitehawk - Mile Oak</routeMapName>
     </RouteMap>
  </routeMap>
  <routeName>1 Whitehawk - Mile Oak</routeName>
  <route_stop />
  <route_stop_stop />
  <route_stop_timetable_stop />
  <service z:Ref="i1" />
   <timetables>
    <Timetable z:Id="i8">
      <dateAdded>2013-08-27T13:22:26.703</dateAdded>
      <daysOfWeek>Sundays and Public Holidays</daysOfWeek>
      <isLive>false</isLive>
      <relativePosition>2</relativePosition>
      <route z:Ref="i4" />
      <route_stop_timetable_stop />
      <timetableDescription>Whitehawk - County Hospital - Brighton - Hove - Portslade - Mile Oak</timetableDescription>
      <timetableFilename>timetable_635132065412586254_0.xml</timetableFilename>
      <timetableId>10121</timetableId>
      <timetableName>1 1A Whitehawk - Mile Oak</timetableName>
      <timetable_stop />
      <validDates i:nil="true" />
    </Timetable>
    <Timetable z:Id="i10">
       <dateAdded>2014-03-26T13:09:06.233</dateAdded>
      <daysOfWeek>Mondays to Fridays</daysOfWeek>
      <isLive>false</isLive>
      <relativePosition>0</relativePosition>
      <route z:Ref="i4" />
      <routeReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
        <a:EntityKey z:Ref="i5" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
      </routeReference>
      <route_stop_timetable_stop />
      <timetableDescription>Whitehawk - County Hospital - Brighton - Hove - Portslade - Mile Oak</timetableDescription>
      <timetableFilename>timetable_635314361366540988_0.xml</timetableFilename>
      <timetableId>10315</timetableId>
      <timetableName>1 1A Whitehawk - Mile Oak</timetableName>
      <timetable_stop />
      <validDates />
    </Timetable>
    <Timetable z:Id="i12">
      <dateAdded>2014-03-26T13:09:53.017</dateAdded>
      <daysOfWeek>Saturdays</daysOfWeek>
      <isLive>false</isLive>
      <relativePosition>1</relativePosition>
      <route z:Ref="i4" />
      <routeReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
        <a:EntityKey z:Ref="i5" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
      </routeReference>
      <route_stop_timetable_stop />
      <timetableDescription>Whitehawk - County Hospital - Brighton - Hove - Portslade - Mile Oak</timetableDescription>
      <timetableFilename>timetable_635314361868081863_0.xml</timetableFilename>
      <timetableId>10317</timetableId>
      <timetableName>1 1A Whitehawk - Mile Oak</timetableName>
      <timetable_stop />
      <validDates />
    </Timetable>
  </timetables>
  <validDestination>Mile Oak</validDestination>
</Route>
<Route z:Id="i14">

 <dateEffectiveFrom>2012-09-01T00:00:00</dateEffectiveFrom>
  <dateEffectiveTo i:nil="true" />
  <isLive>true</isLive>
  <relativePosition>0</relativePosition>
  <routeDescription i:nil="true" />
  <routeId>1235</routeId>
  <routeMap>
    <RouteMap z:Id="i16">
       <routeLineCenterLat>50.82936</routeLineCenterLat>
      <routeLineCenterLng>-0.1599884</routeLineCenterLng>
      <routeLineColour>#0000FF</routeLineColour>
      <routeLineFilename i:nil="true" />
      <routeLineInitialZoom>12</routeLineInitialZoom>
      <routeMapId>383</routeMapId>
      <routeMapName>1 Mile Oak - Whitehawk</routeMapName>
      <routeReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
        <a:EntityKey z:Ref="i15" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
      </routeReference>
    </RouteMap>
  </routeMap>
  <routeName>1 Mile Oak - Whitehawk</routeName>
  <route_stop />
  <route_stop_stop />
  <route_stop_timetable_stop />
  <service z:Ref="i1" />
   <timetables>
    <Timetable z:Id="i18">

      <dateAdded>2013-08-27T13:22:26.72</dateAdded>
      <daysOfWeek>Sundays and Public Holidays</daysOfWeek>
      <isLive>false</isLive>
      <relativePosition>2</relativePosition>
      <route z:Ref="i14" />
      <routeReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
        <a:EntityKey z:Ref="i15" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
      </routeReference>
      <route_stop_timetable_stop />
      <timetableDescription>Mile Oak - Portslade - Hove - Brighton - County Hospital - Whitehawk</timetableDescription>
      <timetableFilename>timetable_635132065412586254_1.xml</timetableFilename>
      <timetableId>10122</timetableId>
      <timetableName>1 1A Mile Oak - Whitehawk</timetableName>
      <timetable_stop />
      <validDates i:nil="true" />
    </Timetable>
    <Timetable z:Id="i20">

      <dateAdded>2014-03-26T13:09:06.297</dateAdded>
      <daysOfWeek>Mondays to Fridays</daysOfWeek>
      <isLive>false</isLive>
      <relativePosition>0</relativePosition>
      <route z:Ref="i14" />
      <routeReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
        <a:EntityKey z:Ref="i15" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
      </routeReference>
      <route_stop_timetable_stop />
      <timetableDescription>Mile Oak - Portslade - Hove - Brighton - County Hospital - Whitehawk</timetableDescription>
      <timetableFilename>timetable_635314361366540988_1.xml</timetableFilename>
      <timetableId>10316</timetableId>
      <timetableName>1 1A Mile Oak - Whitehawk</timetableName>
      <timetable_stop />
      <validDates />
    </Timetable>
    <Timetable z:Id="i22">

      <dateAdded>2014-03-26T13:09:53.047</dateAdded>
      <daysOfWeek>Saturdays</daysOfWeek>
      <isLive>false</isLive>
      <relativePosition>1</relativePosition>
      <route z:Ref="i14" />
      <routeReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
        <a:EntityKey z:Ref="i15" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
      </routeReference>
      <route_stop_timetable_stop />
          <timetableDescription>Mile Oak - Portslade - Hove - Brighton - County Hospital - Whitehawk</timetableDescription>
      <timetableFilename>timetable_635314361868081863_1.xml</timetableFilename>
      <timetableId>10318</timetableId>
      <timetableName>1 1A Mile Oak - Whitehawk</timetableName>
      <timetable_stop />
      <validDates />
    </Timetable>
  </timetables>
  <validDestination>Whitehawk, Brighton Stn</validDestination>
   </Route>
  </routes>
   <serviceAbbreviatedName />
  <serviceDescription>Whitehawk - County Hospital - City Centre - Hove - Portslade - Mile Oak</serviceDescription>

  <serviceId>1149</serviceId>
  <serviceName>1</serviceName>

  <serviceText>Whitehawk - Mile Oak</serviceText>

</Service>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-18 21:43:16

除了@KooKiz已经解释了如何安全检查routeId元素值之外,您的查询还遗漏了使用所需的XNamespace for routeId元素:

代码语言:javascript
复制
where (string)s.Element(ns+"routeId") == "1231"
票数 1
EN

Stack Overflow用户

发布于 2014-10-18 19:30:29

查询失败,因为并非所有Route节点都有routeId子节点。在这种情况下,s.Element("routeId")返回null,因此在尝试读取Value属性时会引发异常。一个方便的解决方法是将元素强制转换为string,而不是调用Value属性:

代码语言:javascript
复制
where (string)s.Element("routeId") == "1231"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26442201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档