0

我实际上正在开发一个使用非常大的 linq 到实体查询(大约 250 行)的项目,该项目与许多不同的实体一起工作。

这个查询取决于几个参数(最多 3 个或 4 个),所以我想“存储”我的查询的表达式树,并只用我这样的几个参数来修改这个。

IQueryable<Foo> myQuery = 
  GetBaseQuery()
  .Where(a => a.Param1 == "foo")
  .Where(a => a.Param2 == "bar");

除了使用编译查询,有没有办法做到这一点?

这个问题有一些条件

  • 我使用 DbContext 并可能更改为 ObjectContext,这似乎是使用编译查询的先决条件。
  • 我使用 Visual Studio 2010,所以...我仅限于 .NET 4 和实体框架 4.3(没有 .NET 4.5、EF5 和自动编译的查询毫无希望)

那么,有没有办法

  • 存储一个表达式树,它只用作“基础”并且不会花费太多时间来生成?
  • 还是在 Visual Studio 2010 中使用 .NET 4.5?
  • 或者使用带有 DbContext 的编译查询

真的提前谢谢!

4

1 回答 1

1

从字里行间看,您似乎想要使用 DbContext 编译查询。(这与存储 LINQ 表达式树并不完全相同,但这似乎并不是我们所做的测试中的性能瓶颈。)据我所知,您有以下选择:

  • 将 EF5 与 .NET 4.5 一起使用。即使您使用的是 VS2010 并以 .NET 4 为目标,如果您在运行应用程序的机器上安装 .NET 4.5,那么您将获得自动编译的查询。
  • 将 EF6 与 .NET 4 或 .NET 4.5 一起使用。EF6 将自动编译的查询代码移出 .NET Framework,因此即使在 .NET 4 上运行时也可以使用它。
  • 使用 ObjectContext 和 CompiledQuery

我不知道有任何方法可以将 CompiledQuery 与 DbContext 一起使用,也没有任何计划来实现这项工作。

于 2012-11-07T23:43:46.770 回答