Если вы начнете изучать LINQ с LINQ-to-objects, вы столкнетесь с этим много раз, как только начнете использовать LINQ-to-Entities.
Вы можете делать практически все, что скомпилируется вLINQ-to-objects, поскольку LINQ-to-objects при компиляции преобразуется в code .
LINQ-to-Entities (и LINQ-to-SQL) преобразуется в деревья выражений.Таким образом, допустим только тот синтаксис, который разрешен для этого конкретного поставщика LINQ.В моем первом «реальном» выражении LINQ-to-Entities, которое скомпилировалось просто отлично, я столкнулся с этой ошибкой около 5 раз, когда один за другим я удалял код, который не обрабатывался LINQ-to-Entities.
Так что, когда вы видите это, это нормально и распространено.Вы должны найти другой путь каждый раз.
Вы можете избежать проблемы с помощью логического эквивалента:
var objects =
from n in context.Products.Where(p => p.r == r)
where (double)n.Latitude < 25
orderby a
select n;
return objects.Take(100).ToList();
Вы также можете получить все данные для клиента и затем запустить свой код, используя LINQ-to-objects:
var objects =
from n in context.Products.Where(p => p.r == r).ToList()
let a = Math.Sqrt((double)n.Latitude)
where a < 5
orderby a
select n;
return objects.Take(100).ToList();
Наконец, у вас должна получиться математика на сервере.Проверьте System.Data.Objects.SqlClient.SqlFunctions SqlFunctions Class .Эти функции переведут в выражение. Это, в частности, похоже, что это может быть билет .