自动编译Linq查询
- 论坛
- 自动编译Linq查询
16 浏览
自动编译Linq查询
我们发现将我们的Linq查询编译起来比每次都要编译要快得多,所以我们想开始使用编译查询。问题是,这样做会使代码难以阅读,因为查询的实际语法在其他地方,远离它的使用地点。
我想到可能可以编写一个使用反射来确定传入的查询是什么,并自动缓存编译后的版本以供将来使用的方法(或扩展方法)。
var foo = (from f in db.Foo where f.ix == bar select f).Cached();
Cached()
需要反射查询对象传入并确定选择的表和查询的参数类型。显然,反射有点慢,所以使用缓存对象的名称可能更好(但是第一次仍然需要使用反射来编译查询)。
var foo = (from f in db.Foo where f.ix == bar select f).Cached("Foo.ix");
有人有这方面的经验吗,或者知道这是否可能?
更新:对于那些还没有看过的人,您可以使用以下代码将LINQ查询编译为SQL:
public static class MyCompiledQueries { public static Func> getFoo = CompiledQuery.Compile( (DataContext db, int ixFoo) => (from f in db.Foo where f.ix == ixFoo select f) ); }
我要做的是有一个这些Func<>
对象的缓存,我可以在第一次自动编译查询后调用它们。