【发布时间】:2017-01-19 10:46:56
【问题描述】:
我正在尝试查询我的地址位置以找出特定半径内的地址。下面是我的 where 子句,results 是 IEnumerable<Properties>
Func<Address, bool> predicate = l =>
{
if (l.Location == null && l.Longitude.HasValue && l.Latitude.HasValue)
{
var point = new Point(l.Longitude.Value, l.Latitude.Value);
return point.Distance(p) <= 300;
}
return false;
};
results = results.Where(x => predicate(x.Address));
但是,我从 NHibernate 得到一个例外
“无法将“NHibernate.Hql.Ast.HqlParameter”类型的对象转换为“NHibernate.Hql.Ast.HqlBooleanExpression”类型。
我该如何解决这个问题?
非常感谢任何帮助。
【问题讨论】:
-
我猜 NHibernate 不能通过 sql 在你的数据库中执行你的谓词。尝试使用 NHibernate 可以翻译成 sql 的一些简单类型。
-
某种意义上的简单类型?你的意思是在这里输入
Point? -
你的数据库理解的东西。
Longitude和Latitude的类型是什么?是否可以自己进行point.Distance(p)计算?我不知道Distance()方法是如何工作的,但也许您可以执行l.Longitude => 300 && l.Longitude <= 300之类的操作。 -
latitude&longitude只是一个双倍。我对point.Distance(p)没有任何问题,因为我还有一个非常适合point.Distance(p)的查询。 -
但
point.Distance(p)无法在数据库中执行。您确定不在内存中已获取的集合中执行此操作吗?请查看 NHibernate 为您的工作方法生成的 sql,您会看到 NHibernate 没有在您的数据库中执行point.Distance(p)。顺便提一句。results是什么?这是query还是List?如果它应该是一个列表,请在.Where()之前调用.ToList()。
标签: c# nhibernate fluent-nhibernate