如何将LINQ查询转换为匿名类型

4

我正在经历一个脑力枯竭的状态。我已经选择了我需要的元素和值,我只是在尝试将其返回为匿名类型时遇到了困难:

以下是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
                  };
1个回答

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根节点中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接