我正在使用NHibernate 3.0并且正在比较Query和QueryOver
var p = _prepo.Query<Party>()
.Where(c => c.Person.LastName == "Bobby")
.FirstOrDefault();
上面的工作,如果我查看对象图,我会获得p.Person的代理类。
var p = _prepo.QueryOver<Party>()
.Where(c => c.Person.LastName == "Bobby")
.FirstOrDefault();
这个失败,错误==&gt;无法解析属性:Person.LastName of:
为什么?
答案 0 :(得分:6)
我不熟悉Linq提供程序,但在使用QueryOver
时,您必须使用联接来执行类似的查询:
IQueryOver<Cat,Kitten> catQuery =
session.QueryOver<Cat>()
.JoinQueryOver(c => c.Kittens)
.Where(k => k.Name == "Tiddles");
Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
session.QueryOver<Cat>(() => catAlias)
.JoinAlias(() => catAlias.Kittens, () => kittenAlias)
.Where(() => catAlias.Age > 5)
.And(() => kittenAlias.Name == "Tiddles");
答案 1 :(得分:0)
在这种情况下使用Linq时,它会起作用,因为过滤是在客户端上进行的,而不是在数据库中。所以它实际上是运行Where的IEnumerable
版本,它与NHibernate无关。
QueryOver使用Expression<Func<T,object>>
NHibernate尝试转换为SQL但失败。由于我不知道的原因,您必须使用JoinQueryOver或JoinAlias明确加入。
有关QueryOver的更多信息,请点击此处: http://nhibernate.info/blog/2009/12/17/queryover-in-nh-3-0.html