如何重构编译的LINQ查询?

时间:2010-12-30 09:35:31

标签: .net linq linq-to-sql compiled-query

是否可以重构编译的LINQ to SQL查询?假设我有一些逻辑的查询,我想建立它。是否可以重用该查询?

例如,假设我有一个基本查询来获取活动项目:

Func<DataContext, IQueryable<Item>> GetActiveItems =
    CompiledQuery.Compile((DataContext context) =>
        context.Items.Where(item => item.IsActive));

我想构建上面的表达式来进行另一个查询。 CompiledQuery的文档表明我不能对编译的委托的结果应用另一个运算符。那么重构这些表达式的推荐方法是什么?

我想我应该使用Expression,但它应该如何使用?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

你可以使用像PredicateBuilder这样的东西来帮助解决这个问题:

Albahari的一个很简单,虽然很容易扩展或开发自己,但效果很好: http://www.albahari.com/nutshell/predicatebuilder.aspx

显然,如果您的查询依赖于无法转换为SQL表达式的本地方法,则必须重新考虑如何执行此操作。

答案 1 :(得分:-1)

没有。它被编译,意思是:已经翻译成sql。您需要重新开始使用新查询。