Linq to Entities:使用函数会导致多个查询

时间:2010-12-14 17:05:04

标签: linq-to-entities user-defined-functions

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

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

Linq构建正确的SQL Select查询,该查询正确使用MyFunction。但问题是:Linq为表中的每一行生成并发送此语句,而不是发送一次!我查看了SQL分析器,发现此Select语句发送到服务器的次数正是Test表中的记录数...

这是什么? Linq to Entities中的另一个错误是什么?有人知道任何解决方法吗?正如这样的行为确实使数据库端功能无法使用。

2 个答案:

答案 0 :(得分:1)

问题已解决。事实证明,SQL Profiler错误地报告了多个语句。 Linq实际上只发送了一份声明。

答案 1 :(得分:0)

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

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