使用LINQ获取XML文档时,返回异常“Expression不能包含lambda表达式”

时间:2014-02-13 09:08:40

标签: c# xml linq lambda

我想使用XML Document中的linq获取XElement。

我的linq查询是:

webDetails.Descendants("WebApplications")
          .Descendants("WebApplication")
          .Where(x => x.Attribute("Uri").Value.Equals(selectedItem.Value))
          .FirstOrDefault();

该文件包含以下xml节点:

<?xml version="1.0" encoding="UTF-8"?>
<WebApplications>
  <WebApplication Name="SharePoint - 80" Uri="http://xxxx/">
    <SiteCollections>
      <SiteCollection>
        <RootWeb Title="Root" Url="/">
          <Webs />
        </RootWeb>
      </SiteCollection>
      <SiteCollection>
        <RootWeb Title="My Site Host" Url="/my/HostSite">
          <Webs />
        </RootWeb>
      </SiteCollection>
    </SiteCollections>
  </WebApplication>
  <WebApplication Name="SharePoint - 9999" Uri="http://xxx/">
    <SiteCollections>   
        <SiteCollection>
        <RootWeb Title="Ritesh Goswami" Url="/my/rami">
          <Webs />
        </RootWeb>
      </SiteCollection>
      <SiteCollection>
        <RootWeb Title="Riyaz Kalva" Url="/my/rialva">
          <Webs />
        </RootWeb>
      </SiteCollection>
    </SiteCollections>
  </WebApplication>
</WebApplications>

如果我执行以下查询:

webDetails.Descendants("WebApplications").Descendants("WebApplication").First()

我正在获取第一个元素,但是当我使用属性值进行过滤时,我得到了上面提到的错误。 我该怎么做才能使用属性值过滤xmlelement?

2 个答案:

答案 0 :(得分:0)

尝试使用它:

webDetails.Descendants("WebApplications").Descendants("WebApplication").Where(x => string.Equals(x.Attribute("Uri").Value, selectedItem.Value, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

答案 1 :(得分:0)

试试这个......

string s = selectedItem.Value;
webDetails.Descendants("WebApplications").Descendants("WebApplication").Where(x => x.Attribute("Uri").Value.Equals(s)).FirstOrDefault();