2011-02-14 16 views
5

我有这样的代码的LINQ查询转换为列表<string>

List<string> IDs = new List<string>(); 
    XDocument doc = XDocument.Parse(xmlFile); 
    var query = from c in doc.Root.Elements("a").Elements("b") 
     select new { ID = c.Element("val").Value}; 

我怎么能转换查询到无环路的foreach列表?

{ ID = c.Element("val")} 

当然串

编辑

我的XML文件

<?xml version="1.0" encoding="utf-8"?> 
<aBase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <a> 
    <b> 
     <val>other data</val> 
    </b> 
    <b> 

     <val>other data</val> 
    </b> 
    </a> 
</aBase> 

回答

13
IDs = query.Select(a => a.ID).ToList(); 

,或者如果你想做到这一点的一条线

List<string> IDs = (from c in doc.Root.Elements("a").Elements("b") 
     select c.Element("val").Value).ToList() 
+0

它抛出我[System.NullReferenceException]。为什么? – Saint 2011-02-14 23:25:32

4

匿名类型并不真的能帮助你,因为你只需要一串字符串,而不是任何类型的元组。尝试:

XDocument doc = XDocument.Parse(xmlFile); 
var query = from c in doc.Root.Elements("a").Elements("b") 
      select c.Element("val").Value; 

var IDs = query.ToList(); 

就个人而言,我只想用方法的语法一路:

var IDs = doc.Root.Elements("a") 
        .Elements("b") 
        .Select(c => c.Element("val").Value) 
        .ToList();