2

可以说我有这样的方法:

IQueryable<MyFlatObject> GetMyFlatObjects()
{
    using (var context = new MyEntities())
    {
        return context.MyEntities.Select(x => new MyFlatObject()
                                                  {
                                                     Property1 = x.PropertyA,
                                                     Property2 = x.PropertyB,
                                                     Property3 = x.PropertyC,
                                                  });
    }
}

现在,如果我打电话:

MyService.GetMyFlatObjects().Where(x => x.Property1 == "test");

完整性检查。此过滤器不会传播到我的数据库存储区(就像我刚刚查询了我的实体一样),而是我将取回所有结果并使用 LINQ-to-objects 进行过滤。正确的?

4

1 回答 1

4

我想,这是不对的。首先,它不查询任何内容,因为您只是将 an 扩展IQueryable<T>到 new IQueryable<T>。如果您调用ToList()或执行任何其他导致查询执行的操作,您将收到异常,因为上下文已在using块的末尾释放。如果您不处置上下文,Where过滤器将被转换为 SQL 并在数据库中执行。我相信它的行为方式与WherePropertyA Select.

于 2012-07-16T22:20:41.277 回答