2013-04-02 2 views
4

У меня такой мозг. Я выбрал элементы и значения мне нужно, я просто борюсь с созданием заносить анонимный тип:Как превратить запрос LINQ в анонимный тип

Вот XML:

<r25:space xl:href="space.xml?space_id=244" id="BRJDMjQ0" crc="00000023" status="est"> 
    <r25:space_id>244</r25:space_id> 
    <r25:space_name>BEC*103</r25:space_name> 
    <r25:formal_name>Branson Education Center 103</r25:formal_name> 
    <r25:partition_id /> 
    <r25:partition_name /> 
    <r25:favorite>F</r25:favorite> 
    <r25:max_capacity>24</r25:max_capacity> 
    <r25:fill_ratio /> 
    <r25:last_mod_user>kleierd</r25:last_mod_user> 
    <r25:last_mod_dt>2009-11-19T15:35:33</r25:last_mod_dt> 
</r25:space> 

мне нужно значение «space_id» и «space_name "которые я могу получить с этим:

var ids = from id in xml.Descendants() 
        where id.Name.LocalName == "space_id" || id.Name.LocalName == "space_name" 
        select (string)id.Value; 

Но я действительно хотел бы это так:

var ids = from id in xml.Descendants() 
        where id.Name.LocalName == "space_id" || id.Name.LocalName == "space_name" 
        select new 
        { 
         theId = //The id val would go here, 
         theName = //The name goes here 
        }; 

ответ

3
var ids = from id in xml.Descendants() 
      where id.Name.LocalName == "space_id" || id.Name.LocalName == "space_name" 
      select new 
      { 
       theId = id.Value, 
       theName = id.Name.LocalName 
      }; 

идентификаторы будут содержать значение:

theId  theName 
244  pace_id 
BEC*103 space_name 

это будет выбирать одни и те же узлы:

XNamespace r25 = "yourSchemaDefinition"; 

var ids = xml.Descendants(r25 + "space_id") 
      .Union(xml.Descendants(r25 + "space_name")) 
      .Select(id => new 
          { 
           theId = id.Value, 
           theName = id.Name.LocalName 
          }); 

ПРИМЕЧАНИЯ: Я добавил r25 определение схемы для вашего XML корневого узла

+0

Людей, это замечательно , благодаря. –

Смежные вопросы