C# 将xml字符串从实体框架查询转换为xdocument

C# 将xml字符串从实体框架查询转换为xdocument,c#,xml,linq,entity-framework,linq-to-xml,C#,Xml,Linq,Entity Framework,Linq To Xml,考虑以下几点: 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 );

考虑以下几点:

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”的未知方法“ParseSystem.Linq.IQueryable”

我对EF相当陌生,但我确信我的错误是我的markupXml没有针对数据库执行,也没有检索到我存储在那里的xml字符串


请提供帮助。

您需要执行查询。目前,markupXml是一种iqueryable。。尚未执行

改变

var markupXml = context.Baxes
            .Where( b => b.BaxId == baxId )
            .Select( b => b.BaxXml );


虽然markupXml可能为空。

好的,但有几件事需要注意。另外,我假设BaxXml是一个字符串

首先,您的查询是IQueryable,这意味着它可能包含多个项。需要一个字符串参数。如果符合逻辑,请尝试先使用

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函数之前从数据库中提取数据

var someItems = context.Baxes.Select(x => b.BaxXml.ToString());