1

考虑以下:

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 字符串。

请帮忙。

4

2 回答 2

0

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

改变

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();

虽然 markupXml 可能为空。

于 2013-09-21T01:05:33.933 回答
0

好的,有几件事。另外,我假设这BaxXml是一个字符串。

第一件事是您的查询是 a IQueryable<string>,这意味着它可能包含多个项目。XDocument.Parse需要一个string论据。First()如果合乎逻辑,请尝试使用。

string markupXml = context.Baxes
    .Where( b => b.BaxId == baxId )
    .First()
    .BaxXml;

其他选项是FirstOrDefault()Single()SingleOrDefault()。如果您使用“OrDefault”方法,请确保检查该值不为空。

其次(来自错误文本),您正在尝试在 sql 中执行 c# 函数。这听起来可能有点奇怪,但以这段代码为例:

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

这将导致您遇到相同的错误,因为 sql 不知道如何处理该ToString()方法。

要解决此问题,ToList()请在执行 c# 函数之前强制查询从数据库中提取数据。

于 2013-09-21T01:06:21.473 回答