如果我通过CompiledQuery.Compile查询了编译实体,然后添加了另一个.Where()子句或.OrderBy()子句,那么这些附加子句是否强制进行完全重新编译,部分重新编译或不重新编译?对编译查询应用附加子句会导致重新编译吗?
回答
随着编译的查询
public static Func<DataClasses1DataContext, IQueryable<ErrorLog>>
GetErrorLogs = CompiledQuery.Compile
((DataClasses1DataContext context) =>
context.ErrorLogs.Where(el => el.UserName != "foo"));
这样调用:
using (DataClasses1DataContext context = new DataClasses1DataContext())
{
context.Log = Console.Out;
var res1 = GetErrorLogs(context).ToList();
var res2 = GetErrorLogs(context).Where(el=>el.ErrorMessage.Contains("foo")).ToList();
}
输出是这样
SELECT [t0].[ErrorLogID], [t0].[ErrorTime], [t0].[UserName], [t0].[ErrorNumber], [t0].[ErrorSeverity], [t0].[ErrorState], [t0].[ErrorProcedure], [t0].[ErrorLine], [t0].[ErrorMessage]
FROM [dbo].[ErrorLog] AS [t0]
WHERE [t0].[UserName] <> @p0
-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [foo]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1
SELECT [t0].[ErrorLogID], [t0].[ErrorTime], [t0].[UserName], [t0].[ErrorNumber], [t0].[ErrorSeverity], [t0].[ErrorState], [t0].[ErrorProcedure], [t0].[ErrorLine], [t0].[ErrorMessage]
FROM [dbo].[ErrorLog] AS [t0]
WHERE [t0].[UserName] <> @p0
-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [foo]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1
的唯一结论是,没有重新编译,但将LINQ2Objects应用于由LINQ2SQL查询产生的对象上的.Where(el=>el.ErrorMessage.Contains("foo"))
。
完全重新编译。
你有来源吗? – 2010-07-15 20:50:21
我这样做,但如果你实际上不相信你在这里得到的答案,为什么要问?我可以理解某种程度的怀疑态度,但答案很容易找到,愤世嫉俗的用户不妨去找到它。我在这里以有经验的开发人员的身份回答问题,而不是作为个人图书管理员。 – 2010-07-15 21:18:06
不幸的是,在这类问题中,很难确定您的答案在没有采购的情况下是否正确。就我个人而言,我花了几个小时在Google上寻找答案,但也许我的Google-fu比你的弱得多。但是,如果有其他人出现并说出另一个答案,而没有采购,我将如何确定正确的答案?对我而言,这种类型的问题依赖于已经找到正确答案的人们以可验证程序或源代码答案的形式提供答案。如果你冒犯了我,我表示歉意。 – 2010-07-16 03:48:14
所有添加的子句导致不同的查询,因此重新编译。如果您想确认您没有进行重新编译,请使用.AsEnumerable()
或.ToList()
完成对查询的调用。这实现了查询,之后你可以做所有的订购等你想要的。
根据您的要求,请参阅this msdn article。
- 1. 摇篮增量Java编译导致完全重新编译
- 2. 使安装导致重新编译
- 3. 在Clojure Repl中重新编译函数会导致编译器警告
- 4. 重新编译编译器对编译后的代码有影响吗?
- 5. 在database.close()后编译查询的重新编译
- 6. 查询中的select语句导致无法编译
- 7. Kohana编写语句或查询编译?
- 8. EF编译查询偶尔会导致SqlException
- 9. 设置断点会导致asp.net在VS2012中重新编译
- 10. Java为什么不依赖常量会导致重新编译?
- 11. cmake的变化选项不会导致重新编译
- 12. sublime text C++编译会导致seg fault
- 13. Boost的is_any_of会导致编译警告?
- 14. SpecificVersion false会导致编译错误
- 15. webpack手表编译器 - 获取导致重新编译的文件
- 16. 用-g编译会导致代码变慢吗?
- 17. LAMBDA导致编译错误
- 18. Magento编译导致错误
- 19. 删除未使用的重载会导致编译错误?
- 20. 重新编译会使用库重载方法吗?
- 21. Codeigniter编译查询
- 22. 查询RESTRICT_REFERENCES编译
- 23. Intellij Idea编译器重新编译已编译的项目
- 24. 添加包含导致编译错误
- 25. 添加“编译“com.jakewharton:butterknife:8.5.1" 导致冲突
- 26. 添加AFNetworking导致编译错误
- 27. 重用在编译的查询
- 28. 重新编译jodatime?
- 29. 重新编译Nginx
- 30. 重新编译TJWS
我不知道你是如何做你的测试的,但是在编译后的查询之后添加一个地方肯定会导致重新编译。 – Carvellis 2011-04-02 08:43:57