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 は照会可能であり、まだ実行されていません。

変化する

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 は null の場合がありますが。

于 2013-09-21T01:05:33.933 に答える
0

わかりました、それでいくつかのこと。また、それは文字列であると想定して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# 関数を実行する前にクエリがデータベースからデータをプルするように強制します。

于 2013-09-21T01:06:21.473 に答える