2013-04-02 73 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 
      }; 

IDS将持有的值:

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

人这是伟大的, 谢谢。 –