0

私からの LINQ に関する質問が他にもありました。

現在、私は内部 SQLite データ ソースを使用する Web サイトに取り組んでいます。Entity Frameworkを利用して、LINQ-To-SQLを使用して「話す」ようにしています。ここで、複雑なオブジェクトがあるとします。このオブジェクトにはリストが含まれており、1 対多の関係をマップします。

ParentObject {
    Integer Id
    List<RelatedObject> RelatedObjects
    string SomeField
}
RelatedObject {
    Integer Id
    ParentObject Parent
    NestedObject Nested
    string SomeField
}
NestedObject {
    Integer Id
    RelatedObject Parent
    string SomeField
}

これは変更できない DB 構造です。ページの読み込み時にコンテキストでクエリを実行しているとします。

var results = context.ParentObjects.Where(parent => parent.SomeField == AnotherField).ToList();

私の知る限り、ToList()linq を使用するとそこでクエリを実行するように "強制" されるため、遅延実行について心配する必要がなくなります。したがって、これを行うのは安全です:

result = results.First();

(result は if() ステートメントにより results() の外側のスコープで定義されます)。

拡張メソッドを試して実行するまで、これで問題なく動作します。これにより、次のことが行われます。

// Assume this is an extension method on ParentObject
return this.RelatedObjects.Where(related => this.SomeField == related.SomeField).Select(related.Nested).First();

(説明しようとすると非常に複雑になります)

「this」(ParentObject) が作成された DataContext が破棄されているため、例外が発生します。

私の質問は、コンテキストが終了した後、どのようにList<RelatedObject> RelatedObjectsフィールド内にアクセスできますか?ParentObject

4

1 に答える 1