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在哪里标签=“容器”

+0

这并不完全清楚您想要做什么,请您将其描述得更精确一些。您可能希望得到结果的样本。 – AxelEckenberger 2010-03-05 20:45:01

+0

请看我上面的编辑。 – Nathan 2010-03-05 21:04:05

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 
       } 
      );