1

我的数据库中有一个包含地理位置的表。我想编写一个函数来查找最接近某个点的位置。我在 NHibernate 中试过这个:

public Location GetClosestLocation(double latitude, double longitude)
{
    var closest = Session.QueryOver<Location>()
        .OrderBy(location => 
            (location.Latitude - latitude) + 
            (location.Longitude - longitude))
        .Asc.SingleOrDefault();

    return closest;
}

但它不起作用 - 我收到运行时错误。

我该怎么做才能返回最近的位置?是否可以通过 NHibernate 的简单函数的结果进行排序?

4

1 回答 1

3

我不认为 QueryOver 可以理解这样的表达式——它对 lambda 表达式的使用仅限于识别属性。有一个采用 IProjection 的 OrderBy() 重载,它提供了更大的灵活性。

使用 LINQ,您应该能够使用几乎与您尝试过的代码相同的代码:

var closest = Session.Query<Location>()
                     .OrderBy(location => 
                                 (location.Latitude - latitude) + 
                                 (location.Longitude - longitude))
                     .SingleOrDefault();
于 2013-01-31T12:50:11.737 回答