知道为什么这个LINQ to XML查询给我重复值?

时间:2011-03-21 05:07:25

标签: c# linq-to-xml

我正在尝试使用LINQ to XML查询从论坛帖子中的帖子返回作者列表,但查询为每个帖子返回了同一作者。

当我单独执行这些查询时,查询正常工作:

var doc = XDocument.Load("http://us.battle.net/wow/en/forum/topic/2267488434");
XNamespace ns = "http://www.w3.org/1999/xhtml";

var posts = doc.Descendants(ns + "div")
                .Where(a => a.Attribute("id") != null && a.Attribute("id").Value == "thread")
                .Elements(ns + "div");
var authors = posts.Descendants().Where(a => a.Attribute("class") != null && a.Attribute("class").Value == "context-link");

但是当我尝试在单个查询中执行相同的操作时,我得不到相同的结果。以下是我的询问:

var authors = from td in doc.Descendants(ns + "div")
                            .Where(a => a.Attribute("id") != null && a.Attribute("id").Value == "thread")
                            .Elements(ns + "div")
                let elements = doc.Descendants()
                                .Where(a => a.Attribute("class") != null)
                let author = elements.First(a => a.Attribute("class").Value == "context-link")
                select new
                {
                    Author = author.Value.Trim(),
                };

知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

您宣布td但从未使用过它。我怀疑读取的行

let elements = doc.Descendants()

阅读let elements = td.Descendants()

我认为查询可以更好地写成:

var authors =
    from post in doc.Descendants(ns + "div")
    where (string)post.Attribute("id") == "thread"
    select
        (from author in post.Descendants(ns + "div")
         where (string)author.Attribute("class")== "context-link"
         select author.Value.Trim())
        .First();