我的数据库中有一个包含地理位置的表格。我想编写一个函数来查找最接近某个点的位置。我在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的简单函数的结果进行排序?
答案 0 :(得分:3)
我不认为QueryOver可以理解这样的表达式 - 它使用lambda表达式仅限于识别属性。 OrderBy()过载需要IProjection,这提供了更大的灵活性。
使用LINQ,你应该可以使用几乎相同的代码:
var closest = Session.Query<Location>()
.OrderBy(location =>
(location.Latitude - latitude) +
(location.Longitude - longitude))
.SingleOrDefault();