C# Linq到XML错误

C# Linq到XML错误,c#,xml,linq,C#,Xml,Linq,我的Linq到XML查询有问题: var q = (from f in xmlLang.Element("lang").Elements("page") where (string)f.Attribute("id") == "home" select f.Element(LangElement).Value.ToString()).Take(1).SingleOrDefault(); XML看起来像这样 <lang>

我的Linq到XML查询有问题:

 var q = (from f in xmlLang.Element("lang").Elements("page")
               where (string)f.Attribute("id") == "home"
               select f.Element(LangElement).Value.ToString()).Take(1).SingleOrDefault();
XML看起来像这样

<lang>
  <page id="home">
     <hello>Hello!</hello>
  </page>
  ...
</lang>

你好
...
我得到这个错误:对象引用没有设置为对象的实例。

f.Element(LangElement)应该做什么

  • 您尚未在此代码段中的任何位置定义
    LangElement
  • 为了便于阅读,我会给
    f
    一个更具描述性的名称(比如,
    langpage
    或其他什么)
  • .Take(1)。SingleOrDefault()
    更简洁地说是
    .FirstOrDefault()
此代码适用于:

var xmlLang = XDocument.Parse(@"
<lang>
  <page id=""home"">
    <hello>Hello!</hello>
  </page>
  ...
</lang>");

var q = (from langpage in xmlLang.Element("lang").Elements("page")
         where langpage.Attribute("id").Value == "home"
         select langpage.Element("hello").Value).FirstOrDefault();
var xmlLang=XDocument.Parse(@)
你好
...
");
var q=(来自xmlLang.Element(“lang”).Elements(“页面”)中的langpage)
其中langpage.Attribute(“id”).Value==“home”
选择langpage.Element(“hello”).Value.FirstOrDefault();

如果以不同方式加载xmlLang,则您的查询可能与任何元素“lang”都不匹配,因此出现异常。

您可能还应该向我们显示xmlLang变量的赋值。除此之外,我认为任何人回答你的问题的机会都很小,只能靠猜测运气。你可以使用First而不是Take(1)。SingleOrDefault()LangElement=string,比如“hello”。