这是我的表格样本
Busnumber st1 st2 st3 st4 st5 st6
1 abc xyz hvh cdff dfds dfds
2 abc efg vv vhv cfg vvv
3 uyt ggg xyz hhh saa pok
4 uyr abc xyz iii ppp wer
我想选择所有有两个电台的总线号码" abc"和" xyz"在这里,我想要的输出是总数1和4
那么如何在windows手机中使用c#在xml到linq查询中实现这一点# 我正在尝试下面的代码
XDocument loadedCustomData = XDocument.Load("best.xml");
var filteredData =
from c in loadedCustomData.Descendants("record")
///what to do below here in were clause statement ??????
where (string)c.Element ("st1") == froms.Text && (string)c.Element("st2") == to.Text ..........
select new words()
{
Busnumber = (string)c.Element("bus")
};
listBox1.ItemsSource = filteredData;
我的xml示例
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data-set xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<record>
<Busnumber>1</Busnumber>
<st1>Santacruz Depot</st1>
<st2>abc</st2>
<st3>Vile Parle</st3>
<st4>Mithibai College</st4>
<st5>xyz</st5>
<st6>Juhu Shopping Centre</st6>
</record>
<record>
.......
</record>
答案 0 :(得分:1)
您可以使用此主题中解释的技巧:Determine if a sequence contains all elements of another sequence using Linq
使用相同的方法检查<record>
的孩子列表是否包含您要检查的所有条件。在您的情况下实施是这样的:
var criteriaArray = new string[]{ "abc", "xyz" };
var filteredData =
from c in Busnumber.Descendants("record")
where !criteriaArray.Except(c.Elements().Select(o => (string)o))
.Any()
select new
{
Busnumber = (string)c.Element("Busnumber")
};
您可能希望更改where子句以仅检查以&#34; st&#34;开头的子元素。 :
where !criteriaArray.Except(c.Elements()
.Where(o => o.Name.LocalName.StartsWith("st"))
.Select(o => (string)o))
.Any()
更新:
我试着解释一下,我假设你已经仔细阅读了我上面链接的问题。此代码段subset.Except(superset).Any()
检查子集是否包含超集中未包含的元素。
因此,这个!subset.Except(superset).Any()
检查子集是否包含不包含在超集中的元素。换句话说,子集仅包含也包含在超集中的元素。换句话说,超集包含子集的所有元素。所以这就是你想要的;检查记录节点(超集)的子节点是否包含criteriaArray(子集)的所有成员。