C # Linq поверх XML => Лямбда-выражение - PullRequest
3 голосов
/ 05 марта 2010

У меня есть XML-документ, который состоит из следующих пунктов:

- <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>

Я выяснил, как найти элемент, где LabelName = 'container'. Но я не очень разбираюсь в лямбда-выражениях и хотел бы узнать, как получить доступ к информации в моих результатах LINQ. Лямбда-выражения тоже могут не подходить. Я открыт для любых предложений.

var dimensions = from field in xml.Elements("LabelFieldBO")
                             where field.Element("LabelName").Value == "container"
                             select field;

Спасибо.

РЕДАКТИРОВАТЬ: я пытаюсь понять, как получить LabelHeight и LabelWidth из XML, где LabelName = "container"

Ответы [ 2 ]

5 голосов
/ 06 марта 2010

Следующий код создает новый анонимный объект, который содержит имя, ширину и высоту метки.

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
                 }
             ); 
1 голос
/ 06 марта 2010
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 анонимных типов с двумя свойствами (LabelWeight и LabelWidth). Каждый объект в IEnumerable представляет собой LabelFieldB0 с LabelName = "container".

Итак, вы можете "получить" свои данные, выполнив что-то вроде:

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);  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...