从LINQ到XML查询获取单个字符串

时间:2011-06-11 05:02:06

标签: c# linq linq-to-xml

这是我想要做的:

string parseCode = from x in xml.Descendants("LogType")
                   where x.Attribute("ID").Value == string)ddlHistoryLogDefinitions.SelectedValue
                   select x.Attribute("ParseCode").Value;

但是这会产生错误:“无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'string'”

x.Attribute("ParseCode")只有一个值,但它坚持返回类型IEnumerable<string>。如何将该值提取到字符串中?

编辑:谢谢您的回复。这对我有用:

string parseCode = (from x in xml.Descendants("LogType")
                    where x.Attribute("ID").Value == (string) ddlHistoryLogDefinitions.SelectedValue
                    select (string) x.Attribute("ParseCode").Value).FirstOrDefault();

这个技巧是在.FirstOrDefault()之前将整个linq查询包装在()中。

2 个答案:

答案 0 :(得分:5)

如果您知道只有一个结果,请使用.Single选择唯一的结果:

string parseCode = (from x in xml.Descendants("LogType")
                   where x.Attribute("ID").Value == string)ddlHistoryLogDefinitions.SelectedValue
                   select x.Attribute("ParseCode").Value).Single();

使用.SingleOrDefault.First如果可能分别没有或超过一个。

答案 1 :(得分:1)

您查询返回一个集合。如果您需要第一个找到的LogType节点,那么您可以执行以下操作:

string parseCode = xml.Descendants("LogType")
    .Where(x => x.Attribute("ID").Value == (string)ddlHistoryLogDefinitions.SelectedValue)
    .Select(arg => x.Attribute("ParseCode").Value)
    .FirstOrDefault();

如果找不到元素,将返回null