自动编译Linq查询

16 浏览
0 Comments

自动编译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<>对象的缓存,我可以在第一次自动编译查询后调用它们。

0