Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как использовать DbGeography.Filter в Linq с Entity Framework 5?

Автор вопроса: Bas de RaadОтветов: 1

В Entity Framework 5 можно использовать пространственные процедуры SQL Server в запросах Linq.

Например, используя объект DbGeography, вы можете использовать метод "Buffer()", который преобразуется в STBuffer в SQL Server. Точно так же Intersects() преобразуется в STIntersects.

Это пример запроса, который работает:

  var point = DbGeography.FromText(string.Format("POINT({1} {0})", latitude, longitude), 4326);
  var query = from person in persons
              let region = point.Buffer(radius)
              where person.Location.Intersects(region)
              select person;

Я хотел бы использовать возможность Фильтр (поскольку это может ускорить ваши запросы, если точность не является вашей главной задачей, как указано здесь: http://www.pauldmendoza.com/post/SQL-Server-Filter-vs-STInterects.aspx) Однако, Я не могу найти, как это сделать в EF5. Это возможно? И если да: как?

Я использую SQL Server 2008 R2.

sql-serverentity-frameworklinqspatial

Ответы

Ответ 1 · рейтинг 7 · Bas de Raad

Слишком рано задал вопрос. Я нашел это: http://msdn.microsoft.com/en-us/library/hh673622(v=vs.110).aspx

И это можно использовать так:

  var point = DbGeography.FromText(string.Format("POINT({1} {0})", latitude, longitude), 4326);
  var query = from person in persons
              let region = point.Buffer(radius)
              where SqlSpatialFunctions.Filter(person.Location, region) == true
              select person;

И это переводится в запрос, который я хотел.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы