LINQ to XML 具有两个属性的行

LINQ to XML row with two attributes

我有问题。我正在尝试获取包含列的行。要过滤它们,我想检查两个属性和值,然后,它们应该 return third col.

例如: XML 代码示例:

<?xml version="1.0" encoding="UTF-8"?>
<teryt>
<catalog name="TERC" type="all" date="2015-01-01">
<row>
<col name="WOJ">02</col>
<col name="POW"/>
<col name="GMI"/>
<col name="RODZ"/>
<col name="NAZWA">DOLNOŚLĄSKIE</col>
<col name="NAZDOD">województwo</col>
<col name="STAN_NA">2015-01-01</col>
</row>
<row>
<col name="WOJ">02</col>
<col name="POW">01</col>
<col name="GMI"/>
<col name="RODZ"/>
<col name="NAZWA">bolesławiecki</col>
<col name="NAZDOD">powiat</col>
<col name="STAN_NA">2015-01-01</col>
</row>
<row>
<col name="WOJ">02</col>
<col name="POW">01</col>
<col name="GMI">01</col>
<col name="RODZ">1</col>
<col name="NAZWA">Bolesławiec</col>
<col name="NAZDOD">gmina miejska</col>
<col name="STAN_NA">2015-01-01</col>
</row>
<row>
<col name="WOJ">02</col>
<col name="POW">01</col>
<col name="GMI">02</col>
<col name="RODZ">2</col>
<col name="NAZWA">Bolesławiec</col>
<col name="NAZDOD">gmina wiejska</col>
<col name="STAN_NA">2015-01-01</col>
</row>
<row>
<col name="WOJ">02</col>
<col name="POW">01</col>
<col name="GMI">03</col>
<col name="RODZ">2</col>
<col name="NAZWA">Gromadka</col>
<col name="NAZDOD">gmina wiejska</col>
<col name="STAN_NA">2015-01-01</col>
</row>

现在我正在尝试使用以下代码来做到这一点:

public static IEnumerable<XElement> ZwrocNumerWojewodztwa(IEnumerable<XElement> rows, String value1, String value2)
{
    return rows
        .Where(row => row.Elements("col")
        .Any(col =>
         col.Attributes("name").Any(attr => attr.Value.Equals("WOJ"))
                && col.Value.Equals(value1) && (col.Attributes("name").Any(attr => attr.Value.Equals("POW"))
                && col.Value.Equals(value2))));
}

当我删除第二个 col.Attributes("name").Any(...) 时,代码运行良好。我做错了什么?

那我得从代码中取出cols "NAZWA",有什么提示吗?

谢谢

此问题是您要查找的行的单列属性均设置为 "POW" AND "WOJ"。将其切换为 OR.

我想这就是你想要的:

return rows
    .Where(row =>
        row.Elements("col").Any(col =>
            col.Attributes("name").Any(attr => attr.Value.Equals("WOJ")) &&
            col.Value.Equals(value1)) &&

        row.Elements("col").Any(col =>
            col.Attributes("name").Any(attr => attr.Value.Equals("POW")) &&
            col.Value.Equals(value2)));

Link 到工作代码:https://dotnetfiddle.net/9aJOCV