错误:查询正文必须以选择子句或组子句结尾

本文关键字:子句 选择 结尾 查询 正文 错误 | 更新日期: 2023-09-27 17:55:22

我有一个这样的xml:

<countries>
    <country ID="MX">
        <idea ID="Valor1">nota1</idea>
        <idea ID="Valor2">nota2</idea>
        <idea ID="Valor3">nota3</idea>
        <idea ID="Valor4">nota4</idea>
    </country>
    <country ID="US">
        <idea ID="Valor1">nota1</idea>
        <idea ID="Valor2">nota2</idea>
        <idea ID="Valor3">nota3</idea>
        <idea ID="Valor4">nota4</idea>
    </country>
</countries>

使用 LINQ to XML,如何获取特定类型的列表?我尝试了这样的事情:

我创建了一个类:

public class Ideas
{
    public string Country { get; set; }
    public List<ListItem> ListIdeas { get; set; }
}

然后我使用这个类来做一个列表:

XDocument xdoc = XDocument.Load(this.Server.MapPath("~/config/ideas.xml"));
var cat = from p in xdoc.Descendants("countries")
                        .Elements("country")
                        .Select(m => new Ideas 
                            {
                                Country = m.Attribute("ID").Value, 
                                ListIdeas = m.Elements("idea")
                                             .Select(c => 
                                                 new ListItem 
                                                 {
                                                     Text = c.Attribute("ID").Value , 
                                                     Value = c.Value
                                                 }).ToList()
                            });

但是我收到下一个错误:

查询正文必须以选择子句或组子句结尾

select 子句中的表达式类型不正确。 类型推断在调用"选择"时失败。

错误:查询正文必须以选择子句或组子句结尾

混合使用查询语法和扩展方法语法。选择一个

var r = (from c in xdoc.Element("countries")
                       .Elements("country")
         select new Country
         {
             ID = c.Attribute("ID").Value,
             Ideas = (from i in c.Elements("idea")
                      select new Idea
                      {
                          Text = i.Attribute("ID").Value, 
                          Value = i.Value
                      }).ToList()
         }).ToList();

请注意,我重命名了类和属性以提高可读性。


在另一种语法中也是如此:

var q = xdoc.Element("countries")
            .Elements("country")
            .Select(c => new Country
                 {
                      ID = c.Attribute("ID").Value,
                      Ideas = c.Elements("idea")
                               .Select(i => new Idea
                                   {
                                       Text = i.Attribute("ID").Value, 
                                       Value = i.Value
                                   })
                               .ToList()
                 })
            .ToList();

您缺少最后的选择。尝试:

XDocument xdoc = XDocument.Load(this.Server.MapPath("~/config/ideas.xml"));
List<Ideas> cat = from p in xdoc.Descendants("countries").Elements("country")
                         .Select(m => new Ideas 
                             {
                                 Country = m.Attribute("ID").Value, 
                                 ListIdeas = m.Elements("idea")
                                 .Select(c => 
                                     new ListItem 
                                     {
                                         Text = c.Attribute("ID").Value , 
                                         Value = c.Value
                                     }).ToList()
                             }) select p;