У меня есть следующие POCO:
public class Trader : AuditableEntity
{
public string Name { get; set; }
public string Telephone { get; set; }
public string Email { get; set; }
public string Website { get; set; }
public List<Address> Addresses { get; set; }
}
public class Address : AuditableEntity
{
public Trader Trader { get; set; }
/* reduce for brevity*/
public decimal Latitude { get; set; }
public decimal Longitude { get; set; }
public IPoint Location { get; set; }
}
В настоящее время необходимо иметь возможность отозвать List<Trader>
из поиска с использованием NetTopologySuite
на основе переданного значения в широте, длине и расстоянии,В настоящее время наша служба предоставляет следующие услуги:
var currentLocation = new Point((double)customerLongitude, (double)customerLatitude) { SRID = 4326 };
var traders = context.Where<Trader>(x => x.Addresses.Any(y => y.Location.IsWithinDistance(currentLocation, distanceFromCustomer)));
До перехода на EntityFrameworkCore
2.2 будет использоваться хранимая процедура.В хранимой процедуре я мог бы динамически возвращать расстояние, которое было у трейдера по лонг-лангу, от переданного по латунино, а также возвращаемые данные;
Distance = (@GEO1.STDistance(geography::Point(ISNULL(Latitude,0.000000),ISNULL(Longitude,0.000000), 4326)))
Можно ли использовать linq для динамической геолокации ивыбрать расстояние таким же образом, как и хранимый процесс, и эффективно добавить его в результат?