【发布时间】:2012-09-20 14:14:51
【问题描述】:
我今天遇到了一种情况,我们的旧数据库中应该永远为空的字段......是空的。
我正在对这个数据库使用 NHibernate 3.2,受影响的查询写在 QueryOver 中。
我目前的查询是这样的
return Session
.QueryOver<FacilityGroup>()
.Where(fg => fg.Owner.Id == Token.OwnerId &&
fg.UserName == Token.UserName)
.OrderBy(fg => fg.Code).Asc
.TransformUsing(Transformers.DistinctRootEntity);
我希望它是这样的:
return Session
.QueryOver<FacilityGroup>()
.Where(fg => fg.Owner.Id == Token.OwnerId &&
fg.UserName == Token.UserName &&
!string.IsNullOrEmpty(fg.Code))
.OrderBy(fg => fg.Code).Asc
.TransformUsing(Transformers.DistinctRootEntity);
当我尝试这个时,我得到一个异常“无法识别的方法调用:System.String:Boolean IsNullOrEmpty(System.String)”
所以 NHibernate 不能翻译 string.IsNullOrEmpty。很公平。但是当我尝试这个时
return Session
.QueryOver<FacilityGroup>()
.Where(fg => fg.Owner.Id == Token.OwnerId &&
fg.UserName == Token.UserName &&
!(fg.Code == null || fg.Code.Trim() == "" ))
.OrderBy(fg => fg.Code).Asc
.TransformUsing(Transformers.DistinctRootEntity);
我得到一个 InvalidOperationException “从范围 '' 引用的 'Domain.Entities.FacilityGroup' 类型的变量 'fg',但它没有定义”
有什么想法吗?
【问题讨论】:
-
如果您删除
trim()会发生什么?
标签: nhibernate queryover