错误:查询正文必须以选择子句或组子句结尾
本文关键字:子句 选择 结尾 查询 正文 错误 | 更新日期: 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;