更多来自我的 LINQ 问题,真是令人惊讶。
所以现在,我正在开发一个使用内部 SQLite 数据源的网站。我正在使用 LINQ-To-SQL 来与它“交谈”,利用实体框架。现在,假设我有一个复杂的对象。这个对象里面包含一个 List,它又映射了一个一对多的关系。
ParentObject {
Integer Id
List<RelatedObject> RelatedObjects
string SomeField
}
RelatedObject {
Integer Id
ParentObject Parent
NestedObject Nested
string SomeField
}
NestedObject {
Integer Id
RelatedObject Parent
string SomeField
}
现在这是我无法更改的数据库结构。假设我在页面加载的上下文中执行查询:
var results = context.ParentObjects.Where(parent => parent.SomeField == AnotherField).ToList();
据我所知,使用ToList()
将“强制”linq 在那里然后执行查询,使我们不必担心延迟执行。所以,这样做是安全的:
result = results.First();
(由于 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