按NHibernate中的函数结果排序?

时间:2013-01-31 11:29:17

标签: nhibernate

我的数据库中有一个包含地理位置的表格。我想编写一个函数来查找最接近某个点的位置。我在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的简单函数的结果进行排序?

1 个答案:

答案 0 :(得分:3)

我不认为QueryOver可以理解这样的表达式 - 它使用lambda表达式仅限于识别属性。 OrderBy()过载需要IProjection,这提供了更大的灵活性。

使用LINQ,你应该可以使用几乎相同的代码:

var closest = Session.Query<Location>()
                     .OrderBy(location => 
                                 (location.Latitude - latitude) + 
                                 (location.Longitude - longitude))
                     .SingleOrDefault();