Linq to Entities: использование функции вызывает несколько запросов - PullRequest
1 голос
/ 14 декабря 2010

Я заметил очень странное поведение Linq to Entities, если в запросе Linq используются пользовательские функции (которые правильно объявлены и подключены к Linq).Предположим, я выполняю оператор

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

. Linq создает правильный запрос SQL Select, который правильно использует MyFunction.Но проблема в следующем: Linq генерирует и отправляет этот оператор для каждой строки в таблице, а не отправляет его один раз!Я посмотрел в профилировщике SQL и обнаружил, что количество раз, когда этот оператор Select отправляется на сервер, равно количеству записей в тестовой таблице…

Что это?Это еще одна ошибка в Linq to Entities?Кто-нибудь знает обходной путь?Такое поведение действительно делает функции на стороне базы данных непригодными для использования.

Ответы [ 2 ]

1 голос
/ 15 декабря 2010

Проблема решена.Оказалось, что SQL Profiler ошибочно сообщал о нескольких операторах.Linq фактически отправляет только 1 оператор.

0 голосов
/ 14 декабря 2010

Но это именно то, что вы написали в своем запросе LINQ: выберите результат MyFunction (ts.TestId) для каждой строки в таблице тестов.Если в вашей таблице 25 строк, то ваш набор результатов также будет содержать 25 записей, каждая из которых получена путем выполнения MyFunction.

Что вы на самом деле хотите сделать?Вы хотите выполнить MyFunction только один раз?Если да, какой TestId вы хотите пройти, если у вас 25 записей?

...