首先介绍一下背景。我希望建立一个程序来降低电子制造商对电子元件的识别技能,这是该程序的电阻部分。我选择写入XML,但我遇到的问题是按照我希望的方式查询。
这是我的XML文件的示例
<?xml version="1.0" encoding="UTF-8"?>
-<Resistors>
-<Resistor>
<ResistNo>RES144</ResistNo>
<Value>2K 0.6w</Value>
<Band1>Red</Band1>
<Band2>Black</Band2>
<Band3>Black</Band3>
<Band4>Brown</Band4>
<Band5>Brown</Band5>
</Resistor>
</Resistors>
为了在入门级可用,我需要能够通过Band颜色查询和过滤电阻,每个电阻都有一个独特的颜色代码,因此如果不存在,获得两个结果的风险很小。
到目前为止,我有这段代码。
var xmlResist = XDocument.Parse("resistor.xml");
var elements = xmlResist.Element("Resistors")
.Descendants("Resistor")
.Where(x => x.Element("Band1").Value == txtBand1.Text)
.Where(x => x.Element("Band2").Value == txtBand2.Text)
.Where(x => x.Element("Band3").Value == txtBand3.Text)
.Where(x => x.Element("Band4").Value == txtBand4.Text)
.Where(x => x.Element("Band5").Value == txtBand5.Text);
从这里我迷路了,我需要从“ResistNo”和“Value”中获取值并将它们发布到txtResistNo.Text和txtValue.Text中。我一直在摸着我的头在网上搜索甚至接近的东西,上面的代码就像我发现的那样近。
答案 0 :(得分:0)
您需要的只是Select
:
var elements = xmlResist.Element("Resistors")
.Descendants("Resistor")
.Where(x => x.Element("Band1").Value == txtBand1.Text)
.Where(x => x.Element("Band2").Value == txtBand2.Text)
.Where(x => x.Element("Band3").Value == txtBand3.Text)
.Where(x => x.Element("Band4").Value == txtBand4.Text)
.Where(x => x.Element("Band5").Value == txtBand5.Text)
.Select(x => new
{
ResistNo = (string)x.Element("ResistNo"),
Value = (string)x.Element("Value")
});
另外,如果使用一个Where
而不是五个来提高效率,则可以提高效率:
var elements = xmlResist.Element("Resistors")
.Descendants("Resistor")
.Where(x => x.Element("Band1").Value == txtBand1.Text &&
x.Element("Band2").Value == txtBand2.Text &&
x.Element("Band3").Value == txtBand3.Text &&
x.Element("Band4").Value == txtBand4.Text &&
x.Element("Band5").Value == txtBand5.Text)
.Select(x => new
{
ResistNo = (string)x.Element("ResistNo"),
Value = (string)x.Element("Value")
});
如果您想要一个结果,请使用First
或FirstOrDefault