Я выполняю расчеты расстояния между адресами. В частности, расстояние между пользователем и конкретным местоположением. Я могу создавать запросы LINQ, которые заставляют базу данных вычислять расстояние и упорядочивать результаты по этому расстоянию. Однако я не могу найти способ ВОЗВРАТИТЬ это расстояние в сущностях. Упрощенная версия запроса приведена ниже:
public IQueryable<Place> GetPlacesWithinRadiusOfUser(double userLongitude, double userLatitude, int miles )
{
return (from Place in this.ObjectContext.Places
where RadiusOfEarth * Math.Acos((double)
(Math.Sin((double)Place.Addresses.First().Latitude / DegreesToRadians) * Math.Sin(userLatitude / DegreesToRadians))
+
(Math.Cos((double)Place.Addresses.First().Latitude / DegreesToRadians) * Math.Cos(userLatitude / DegreesToRadians)
* Math.Cos((userLongitude / DegreesToRadians) - ((double)Place.Addresses.First().Longitude / DegreesToRadians))
)
)
<= miles
select Place);
}
По сути, математика сверху, которую мне нужно вернуть как свойство Distance для Address Entity (который является дочерним по отношению к Place). Я создал следующий частичный класс, и поле появляется в клиенте silverlight.
public partial class Address
{
//The Distance field is used to return a distance if a reference point is provided in a query
[DataMember]
public Nullable<decimal> Distance { get; set; }
}
Итак, свойство Distance и расчеты зависят от параметров метода GetPlacesWithinRadiusOfUser .
Есть ли способ получить параметры из запроса к Адресной сущности , чтобы я мог выполнить те же вычисления и сделать их доступными в сущности по прибытии к клиенту?
Я, конечно, могу создать подпрограмму на стороне клиента, которая будет выполнять эти вычисления, но это будет запутанным, поскольку мне придется постоянно вводить это в каждый пользовательский интерфейс, который в этом нуждается. Я бы предпочел вернуть его в Entity, чтобы я мог просто привязать его и отобразить его (по сути, я хочу, чтобы вычисляемое поле возвращалось из SQL). Если бы это был строгий SQL, это было бы тривиально, но я не знаю, как это сделать с помощью RIA Services и Entity Framework.
а мысли?