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
我有问题。我正在尝试获取包含列的行。要过滤它们,我想检查两个属性和值,然后,它们应该 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