2015-08-07 1 views
2

Я разрабатываю приложение ASP.NET MVC и использую Mysql с инфраструктурой сущности. Но у меня возникают проблемы с выполнением Linq запрос так:Использование математических функций в структуре Entity с mysql

var place= dbContext.Places.FirstOrDefault(x => Math.Sqrt(x.Lat) > 0); 

Я также попытался с помощью SqlFunctions:

var place= dbContext.Places.FirstOrDefault(x => SqlFunctions.SquareRoot(x.Lat) > 0); 

Но так или иначе я получаю 'System.NotSupportedException':

Дополнительная информация: Указанный метод «System.Nullable 1[System.Double] SquareRoot(System.Nullable 1 [System.Decimal]) 'в типе« System.Data.Entity.SqlServer.SqlFunctions »не может быть переведен в выражение хранения LINQ to Entities.

Можно ли использовать функцию квадратного корня, чтобы она могла быть переведена в выражение LINQ to Entities?

ответ

3

Entity Framework не поддерживает функцию Sqrt:

Math Canonical Functions - список поддерживаемых функций.

Таким образом, вы можете использовать Math.pow InstEd:

var place= dbContext.Places.FirstOrDefault(x => Math.Pow(x.Lat,0.5) > 0); 
+0

Спасибо. Сохраненный мой день :) –

0

Здесь вы пытаетесь выполнить Math.Sqrt с базой данных SQL, которая не поддерживается.

Вам необходимо будет использовать SQLFunctions или выполнить ToList() после dbContext.Places. Однако, в зависимости от того, сколько мест вы вернете, это будет неэффективно.

var place = dbContext.Places.ToList(). FirstOrDefault (x => Math.Sqrt (x.Lat)> 0);

+2

Я также пробовал SQLFunctions, как я уже упоминал в своем вопросе, но не помог. Я думаю, и ToList будет очень медленным в моем случае. Решение freshbm помогло. –