实体框架仅支持标量类型

时间:2010-11-17 18:08:58

标签: entity-framework linq-to-entities entity-framework-4

我有一个我想要预编译的查询,但是查询是在已经存在的ObjectQuery上执行的,如下所示: -

ObjectQuery<Books> books = _ctx.Books.Include("Authors");

books = books.Where(book=>book.Vendor.Listing.Select(vend=>vend.Price > 200));

我想对第二个查询使用编译查询,但是这需要将“books”对象传递给Compiled Query的“Invoke”方法,当我尝试这样做时会抛出一个错误,说“只有标量类型”支持“自”书籍“是ObjectQuery类型。

所以我真的不能这样做: -

var results = QueryCache.GetVendorFilter.Invoke(context,books);

其中,GetVendorFilter是一个已编译的查询。

还有其他方法可以编译此查询吗?有谁知道EF4是否有此限制?

1 个答案:

答案 0 :(得分:1)

我的理解是,编译的查询基本上预先构建了查询表达式的SQL语句,但保留了参数值undefined。由于SQL不支持使用其他查询作为参数,因此我不能这样做。

使用预编译查询需要注意的一点是,当您对它们执行任何操作时,它们将成为“只是另一个查询”,在评估它时必须重新编译。因此,即使您最后调用.Take(10),也会丢失预编译查询的值。

由于您的books查询几乎已修复,因此应该很容易为此特定方案创建单独的预编译查询。