C#的LINQ在XML => Lambda表达式
问题描述:
我具有由许多下面的XML文档:C#的LINQ在XML => Lambda表达式
- <LabelFieldBO>
<Height>23</Height>
<Width>100</Width>
<Top>32</Top>
<Left>128</Left>
<FieldName>field4</FieldName>
<Text>aoi_name</Text>
<DataColumn>aoi_name</DataColumn>
<FontFamily>Arial</FontFamily>
<FontStyle>Regular</FontStyle>
<FontSize>8.25</FontSize>
<Rotation>0</Rotation>
<LabelName />
<LabelHeight>0</LabelHeight>
<LabelWidth>0</LabelWidth>
<BarCoded>false</BarCoded>
</LabelFieldBO>
我已想出如何找到元件,其中标签=“容器”。但我不熟悉lambda表达式,并想知道如何访问我的LINQ结果中的信息。 Lambda表达式可能不是要走的路。我愿意接受任何建议。
var dimensions = from field in xml.Elements("LabelFieldBO")
where field.Element("LabelName").Value == "container"
select field;
谢谢。
编辑:我试图找出是如何得到LabelHeight和LabelWidth在哪里标签=“容器”
答
from field in xml.Elements("LabelFieldBO")
where field.Element("LabelName").Value == "container"
select new
{
LabelHeight = field.Element("LabelHeight").Value,
LabelWidth = field.Element("LabelWidth").Value
}
这具有两个属性返回匿名类型的IEnumerable的XML(可LabelWeight和LabelWidth)。 IEnumerable中的每个对象都表示LabelName =“container”的LabelFieldB0。
所以,你可以“在”你的数据做这样的事情:
var containerLabels =
from field in xml.Elements("LabelFieldBO")
where field.Element("LabelName").Value == "container"
select new
{
LabelHeight = field.Element("LabelHeight").Value,
LabelWidth = field.Element("LabelWidth").Value
}
foreach (var containerLabel in containerLabels)
{
Console.WriteLine(containerLabel.LabelHeight + " "
+ containerLabel.LabelWidth);
}
+0
谢谢,效果很好。 – Nathan 2010-03-05 21:44:56
答
下面的代码创建一个包含标签名称,宽度和高度的新的匿名对象。
var result = doc.Elements("LabelFieldBo")
.Where(x => x.Element("LabelName").Value == "container")
.Select(x =>
new {
Name = x.Element("LabelName").Value,
Height = x.Element("LabelHeight").Value,
Width = x.Element("LabelWidth").Value
}
);
这并不完全清楚您想要做什么,请您将其描述得更精确一些。您可能希望得到结果的样本。 – AxelEckenberger 2010-03-05 20:45:01
请看我上面的编辑。 – Nathan 2010-03-05 21:04:05