通过连接QueryOver并通过Independent if添加条件

时间:2011-09-17 05:13:11

标签: nhibernate queryover

我在Nhibernate 3.1中有JoinQueryOver的QueryOver

Person类具有Identity类的关联(一对一) Code是Person类的字段,FirstName是Identity类的字段。

var q = SessionInstance.QueryOver<Person>()
        .Where(p => p.Code.IsLike(code,MatchMode.Start))
        .Full.JoinQueryOver(p => p.Identity);

if (!String.IsNullOrEmpty(firstName))
   q = q.Where(i => i.FirstName.IsLike(firstName, MatchMode.Anywhere));

return q.List<Person>();

结果是正确的,但是有问题。搜索不包括Person类中Code字段的null值项。我更正了以下查询。

var q = SessionInstance.QueryOver<Person>()
        .Full.JoinQueryOver(p => p.Identity);

if (!String.IsNullOrEmpty(Code))
   q = q.Where(i => i.Person.Code.IsLike(code, MatchMode.Start));

if (!String.IsNullOrEmpty(firstName))
   q = q.Where(i => i.FirstName.IsLike(firstName, MatchMode.Anywhere));

return q.List<Person>();

现在我通过此消息遇到运行时错误:

  

无法解析属性:Identity.Code:MyNameSpace.Domain.Entities.Identity

在一个查询中通过两个类之间的连接,如何通过if添加两个条件(where)。

(if parameter != null)

1 个答案:

答案 0 :(得分:3)

Identity identityAlias = null;
var q = SessionInstance.QueryOver<Person>()
        .Full.JoinAlias(p => p.Identity, () => identityAlias);

if (!String.IsNullOrEmpty(code))
   q.Where(p => p.Code.IsLike(code, MatchMode.Start));

if (!String.IsNullOrEmpty(firstName))
   q.Where(() => identityAlias.FirstName.IsLike(firstName, MatchMode.Anywhere));

var q = SessionInstance.QueryOver<Person>();

if (!String.IsNullOrEmpty(code))
    q.Where(p => p.Code.IsLike(code, MatchMode.Start));

if (!String.IsNullOrEmpty(firstName))
    q.Full.JoinQueryOver(p => p.Identity)
        .Where(i => i.FirstName.IsLike(firstName, MatchMode.Anywhere));