使用Linq / EF按距离高效过滤结果

时间:2015-02-14 21:36:01

标签: c# linq entity-framework entity-framework-6

我有以下内容:

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();

这只是把所有东西扔进内存然后进行计算。

0 个答案:

没有答案