"上下文实例"对于使用where子句的XElement linq to XML查询

时间:2016-12-08 01:23:16

标签: c# linq-to-xml xelement

我想从XElement集合返回一个字符串值列表,在构造代码时出现此错误,并且看不到我错过的内容。 enter image description here

这是我写过的关于这个问题的课程的一部分:

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>

1 个答案:

答案 0 :(得分:2)

首先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来比较属性文本值的值)。