Linq to Entities:功能的使用导致多个查询

问题描述:

如果在Linq查询中使用用户定义的函数(已正确声明并连接到Linq),我注意到非常奇怪的Linq to Entities行为。 假设我执行语句Linq to Entities:功能的使用导致多个查询

var list =(from ts in context.Tests select MyFunction(ts.TestId));

Linq构建正确的SQL Select查询,该查询正确使用MyFunction。但问题是:Linq为表中的每一行生成并发送此语句,而不是发送一次!我查看了SQL分析器,发现这个Select语句发送到服务器的次数正好是Test表中的记录数... 这是什么?它是否是Linq中实体的另一个bug?有人知道任何解决方法吗?像这样的行为确实会使数据库端功能无法使用。

但是,这正是您在LINQ查询中编写的内容:为测试表中的每一行选择MyFunction(ts.TestId)的结果。 如果表中有25行,则结果集也将包含25条记录,每条记录都通过执行MyFunction获得。

你究竟想要做什么?你想只执行一次MyFunction吗?如果是这样,你想通过哪个TestId,如果你有25条记录?

+0

当然,MyFunction()应该执行的次数与表中的记录次数相同。这不是我关心的问题。问题是,SQL语句本身(从Test中选择MyFunction(TestId))发送到SQL服务器25次!如果您查看SQL分析器并检查执行此语句后发生了什么,您将明白我在说什么。 – 2010-12-14 19:07:46

+0

@Dimitry - 显然我没有你的代码和你的数据库,所以我不能只是'看看SQL分析器'。如果您发布更多代码,尤其是评估您的linq查询的代码,它可能会有所帮助。 – 2010-12-14 20:21:01

+0

你不需要我的数据库或我的代码来看看这个非常普遍的问题。只需创建任何用户定义的函数,将它与Linq连接到实体并运行任何正在使用此函数的Linq查询。现在看一下SQL事件探查器,你会发现它处理的异常大量的查询(而不是只有1个查询,这是预期的)。 – 2010-12-14 20:43:30

问题已解决。事实证明,SQL事件探查器错误地报告了多条语句。 Linq实际上只发送1条语句。