我有以下内容:
var closeProfiles = (from p in profiles
let geo = new GeoCoordinate{Latitude = p.LocationLat, Longitude = p.LocationLong}
where geo.GetDistanceTo(coord) < distance
select p);
var results = closeProfiles.OrderByDescending(s => s.LastOnline).Skip(query.Index*40).Take(40).ToList();
这将返回错误:
LINQ to Entities无法识别方法'Double GetDistanceTo(System.Device.Location.GeoCoordinate)'方法,这个 方法无法转换为商店表达式。
基于这个问题:C# - LINQ - shortest distance by GPS latitude and longitude
我期待这个工作。如何在计算之前不必将所有配置文件放入内存中来实现这一点?
即使有以下内容:
var closeProfiles =
profiles.Where(e => (((e.LocationLat - coord.Latitude)*(e.LocationLat - coord.Latitude) +
(e.LocationLong - coord.Longitude)*(e.LocationLong - coord.Longitude)) <
distance)).ToList();
我的表现类似于:
closeProfiles = profiles.ToList()
.Where(
s =>
DistanceUtilities.GetDistance(s.LocationLat, s.LocationLong, user.LocationLat,
user.LocationLong) < user.SearchRadius).ToList();
这只是把所有东西扔进内存然后进行计算。