Linq To Sql:编译查询和扩展方法

时间:2010-04-26 11:23:10

标签: linq-to-sql compiled-query

我有兴趣,Linq2Sql如何处理一个返回IQueryable的编译查询。

如果我根据编译的查询调用扩展方法,如“GetEntitiesCompiled()。Count()”或“GetEntitiesCompiled()。Take(x)”。 Linq2Sql在后台做了什么?这将是非常糟糕的,所以在这种情况下我应该编写一个编译的查询,如“CountEntitiesCompiled”。

他是否将结果(在本例中为“GetEntitiesCompiled()”)加载到内存中(映射到像“ToList()”这样的实体类)?

那么什么情况才有意义,当编译的查询返回IQueryable时,在查询到Sql-Server之前,该查询无法修改。 所以在我看来,我可以作为良好的回报列表。

感谢您的回答!

2 个答案:

答案 0 :(得分:0)

据我所知 - 如果它无法使用预先编译的查询完全(因为你已经进一步编写了它),它就像任何常规一样运行它em> IQueryable查询 - 所以它确实仍然会发出SELECT COUNT(1) FROM ...(它不应该迭代整个表/无论如何)。

真正的答案是:个人资料;您可以挂钩.Log以查看TSQL,例如:

myDataContext.Log = Console.Out; // write TSQL to the console

或者只是使用SQL跟踪来查看电汇上下的内容。

答案 1 :(得分:0)

Linq2Sql在这种情况下不够智能。根据我的经验,它总是按原样执行编译部分。如果是GetEntitiesCompiled().Count(),它将获取所有记录,然后执行内存中Count()