如何找到特定于XElement的子项(使用LINQ的c#中)?

如何找到特定于XElement的子项(使用LINQ的c#中)?,linq,attributes,where,xelement,Linq,Attributes,Where,Xelement,我有这样一个XML文件: <root> <environment env="PROD"> <key name="Big Key" propagate="true" value="21" /> </environment> <environment env="PRE-PROD"> <key name="First Key" propagate="true" value="4" /> <key name=

我有这样一个XML文件:

<root>
 <environment env="PROD">
  <key name="Big Key" propagate="true" value="21" />
 </environment>
 <environment env="PRE-PROD">
  <key name="First Key" propagate="true" value="4" />
  <key name="Second Key" propagate="true" value="3" />
 </environment>
</root>

我想检查该文件中是否存在密钥,以及传播项是否为true。 我设法获得了这两个System.Xml.Linq.XElement:key name=“First key”和key name=“Second key”。 但是我想只获取一个pKeyname(例如“第二个键”)我找不到如何

public static bool IsPropagate(string pXmlFileName, string pEnvironment, string pKeyname)
{
var doc = XElement.Load(pXmlFileName);
IEnumerable<XElement> childList = doc.Elements("environment")
.Where(elt => elt.Attribute("env").Value == pEnvironment)
.Elements();

if (childList.Any())
return true;
return false;
}
publicstaticboolspropagate(字符串pXmlFileName、字符串pEnvironment、字符串pKeyname)
{
var doc=XElement.Load(pXmlFileName);
IEnumerable childList=doc.Elements(“环境”)
.Where(elt=>elt.Attribute(“env”).Value==pEnvironment)
.Elements();
if(childList.Any())
返回true;
返回false;
}

任何帮助都将不胜感激

这将有助于获得准确的密钥:

       public static bool IsPropagate(string pXmlFileName, string pEnvironment, 
                                      string pKeyname)
        {
            var doc = XElement.Load(pXmlFileName);
            IEnumerable<XElement> childList = doc.Elements("environment")
            .Where(elt => elt.Attribute("env").Value == pEnvironment)
            .Elements()
            .Where(a => a.Attribute("name").Value == pKeyname);

            if (childList.Any())
                return true;
            return false;
        }
public static bool IsPropagate(字符串pxml文件名、字符串pEnvironment、,
字符串(名称)
{
var doc=XElement.Load(pXmlFileName);
IEnumerable childList=doc.Elements(“环境”)
.Where(elt=>elt.Attribute(“env”).Value==pEnvironment)
.要素()
其中(a=>a.Attribute(“name”).Value==pKeyname);
if(childList.Any())
返回true;
返回false;
}

它通过添加“FirstOrDefault”来工作!谢谢


谢谢你的回答。不幸的是,我尝试了,但childList结果总是空的。如果没有最后一个where子句,它的答案是:
+[0]System.Xml.Linq.XElement
+[1]System.Xml.Linq.XElement
@user2382465,但对我来说,它工作得很好。在第二个Where子句之后,我需要添加类似“ToList”的内容,在我的例子中是“FirstOrDefault”。
  public static bool IsPropagate(string pXmlFileName, string pEnvironment, string pKeyname)
    {
        var doc = XElement.Load(pXmlFileName);
        XElement child = doc.Elements("environment")
                         .Where(elt => elt.Attribute("env").Value == pEnvironment)
                         .Elements()
                         .FirstOrDefault(a => a.Attribute("name").Value == pKeyname);

        if (child != null)
            return true;
        return false;
    }