"context instance" 对于 XElement linq to XML 使用 where 子句的查询

"context instance" for a XElement linq to XML query using a where clause

我想 return XElement 集合中的字符串值列表,但在构建我的代码时出现此错误,并且没有看到我遗漏了什么。

这是我写的关于这个问题的 class 的一部分:

private XElement _viewConfig;

public ViewConfiguration(XElement vconfig)
{

    _viewConfig = vconfig;
}

public List<string> visibleSensors()
{

    IEnumerable<string> sensors = (from el in _viewConfig
                                   where el.Attribute("type").Value == "valueModule"
                                         && el.Element.Attribute("visible") = true
                                   select el.Element.Attribute("name").Value);

    return sensors.ToList<string>();
}

XElement 集合的形式为

<module name="temperature" type="valueModule" visible="true"></module>
<module name="lightIntensity" type="valueModule" visible="true"></module>
<module name="batteryCharge" type="valueModule" visible="true"></module>
<module name="VsolarCells" type="valueModule" visible="false"></module>

首先 XElement 不是 IEnumerable 因此第一行 from el in _viewConfig 无效。如果这是来自有效的 XML 文件,我假设 <module> 元素包含在父元素中(例如,<modules>)。如果你让 _viewConfig 指向 modules 那么下面的方法会起作用:

IEnumerable<string> sensors = (
    from el in _viewConfig.Elements()
    where el.Attribute("type").Value == "valueModule"
          && el.Attribute("visible").Value == "true"
    select el.Attribute("name").Value);

另请注意,el 的类型是 XElement,因此它没有名为 Element 的 属性,我也从上面删除了它(连同我必须修复的几个语法错误:使用 == 而不是 = 进行比较,并使用字符串文字 "true" 而不是布尔值 true 来比较属性的值文本值)。