Просто, чтобы дать некоторые подробности о сообщении об ошибке - Вы можете использовать let
привязку внутри вычислений LINQ to SQL. Проблема в том, что вы используете императивную конструкцию и императивную последовательность выражений.
Ваш запрос содержит что-то вроде этого (где body
- это некоторое выражение, которое возвращает unit
):
for v in e1 do
body
yield e3
Это недопустимо, поскольку LINQ to SQL может содержать только деревья выражений C #, которые могут содержать только одно выражение - для его представления нам потребуется поддержка операторов (но это не совсем имеет смысла в базе данных мир).
Чтобы удалить утверждение, переводчик F # преобразует это в нечто (очень грубо), например:
Special.Sequence
(fun () -> for v in e1 do body)
(fun () -> e3)
Теперь это просто одно выражение (метод Sequence
живет где-то в библиотеках F #, так что вы можете компилировать цитаты F # с помощью LINQ и запускать их динамически), но транслятор LINQ to SQL не понимает Sequence
и не может справиться с этим.