ADO Linq to xml
本文关键字:xml to Linq ADO | 更新日期: 2023-09-27 18:07:06
我正在编写一个程序,通过ADO数据上下文,我正在运行一个使用组类并返回xml文档的数据库查询。我能够让xml工作,但XAttribute("pub_id", from p in g select new { p.Pubs_id })
给出:
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[Pubs.BookStore+BookResults,<>f__AnonymousType1`1[System.String]]
下面是代码:
XDocument xdoc = new XDocument(new XElement("reports",
from b in bookResults
group b by b.Title1 into g
select new XElement("book",
new XAttribute("pub_id", from p in g select new { p.Pubs_id }),
new XElement("Title", g.Key),
from bk in g
select new XElement("Name", new XAttribute("au_id", bk.Au_id), bk.Name))
)
xdoc.Save("Books.xml");
期望的XML输出示例(使用酒吧样本db)
<reports>
<book pub_id="1389">
<Title>The Busy Executive's Database Guide</Title>
<Name au_id="409-56-7008">Bennet,Abraham</Name>
<Name au_id="213-46-8915">Green,Marjorie</Name>
</book>
<book pub_id="0877">
<Title>Fifty Years in Buckingham Palace Kitchens</Title>
<Name au_id="648-92-1872">Blotchet-Halls,Reginald</Name>
</book>
<book pub_id="0877">
<Title>The Gourmet Microwave</Title>
<Name au_id="722-51-5454">DeFrance,Michel</Name>
<Name au_id="899-46-2035">Ringer,Anne</Name>
</book>
您正在提供一个返回序列作为属性值的查询。我的猜测是,您希望有一个结果,在这种情况下,您只需要将其更改为:
new XAttribute("pub_id", (from p in g select new { p.Pubs_id }).Single())
甚至:
new XAttribute("pub_id", (from p in g select p.Pubs_id).Single())
不太清楚是不是你所期望的,但这就是问题所在。LINQ to XML在您的查询上调用ToString
,并且您正在看到其结果。将构造函数的第二个参数更改为提供单个值的参数,无论您需要怎么做。
我怀疑你会发现,如果你缩进你的代码更清楚,它会使它更明显发生了什么-目前它不是真的很清楚,只是看它。我将把你的问题重写为:
from b in bookResults
group b by b.Title1 into g
select new XElement("book",
new XAttribute("pub_id", from p in g select new { p.Pubs_id }),
new XElement("Title", g.Key),
from bk in g
select new XElement("Name", new XAttribute("au_id", bk.Au_id), bk.Name))
)