将 xml 字符串从实体框架查询转换为 xdocument
本文关键字:查询 转换 xdocument 框架 实体 xml 字符串 | 更新日期: 2023-09-27 18:32:16
请考虑以下事项:
public static XDocument GetMarkupXml( int baxId ) {
using ( var context = new Sys.EntityModels.BfxEntities() ) {
var markupXml = context.Baxes
.Where( b => b.BaxId == baxId )
.Select( b => b.BaxXml );
return XDocument.Parse( markupXml );
}
}
这不是编译。它在"XDocument.Parse( markupXml )"上出错。错误消息是:"System.Xml.Linq.XDocument"的未知方法"Parse(System.Linq.IQueryable)"
我对 EF 相当陌生,但我确信我的错误是我的"markupXml"没有针对数据库执行,也没有检索我存储在那里的 xml 字符串。
请帮忙。
您需要执行查询。目前,markupXml 是一个可查询的 ..尚未执行。
改变
var markupXml = context.Baxes
.Where( b => b.BaxId == baxId )
.Select( b => b.BaxXml );
自
var markupXml = context.Baxes
.Where( b => b.BaxId == baxId )
.Select( b => b.BaxXml ).FirstOrDefault();
尽管标记 XML 可能为空。
好的,所以有几件事。另外,我假设BaxXml
是一个字符串。
首先是你的查询是一个 IQueryable<string>
,这意味着它可能包含多个项目。 XDocument.Parse
需要一个string
论据。如果合乎逻辑,请尝试使用First()
。
string markupXml = context.Baxes
.Where( b => b.BaxId == baxId )
.First()
.BaxXml;
其他选项包括FirstOrDefault()
、Single()
和SingleOrDefault()
。如果使用"OrDefault"方法,请确保检查该值是否不为 null。
其次(从错误文本来看),您正在尝试在 sql 中执行 c# 函数。这听起来可能有点奇怪,但以这段代码为例:
var someItems = context.Baxes.Select(x => b.BaxXml.ToString());
这将导致您得到的相同错误,因为 sql 不知道如何处理 ToString()
方法。
若要解决此问题,请使用 ToList()
强制查询在执行 c# 函数之前从数据库拉取数据。