NHibernate QueryOver可以有一个SQL where语句吗?

NHibernate QueryOver可以有一个SQL where语句吗?,nhibernate,queryover,Nhibernate,Queryover,我是新来的。我的问题是,我想通过使用实体(ie hbm)中不包含的列来缩小查询范围。我想这样做: Session.QueryOver<MyEntity>() .SQL_Where("MyFlag = 1") Session.QueryOver() .SQL_其中(“MyFlag=1”) 因为我以后不再使用该标志,所以我不想将其包含到实体中 我知道我可以使用: Session .CreateSQLQuery("SELECT A,B,C FROM ENTITY WHE

我是新来的。我的问题是,我想通过使用实体(ie hbm)中不包含的列来缩小查询范围。我想这样做:

Session.QueryOver<MyEntity>()
    .SQL_Where("MyFlag = 1")
Session.QueryOver()
.SQL_其中(“MyFlag=1”)
因为我以后不再使用该标志,所以我不想将其包含到实体中

我知道我可以使用:

Session
    .CreateSQLQuery("SELECT A,B,C FROM ENTITY WHERE MyFlag = 1")
    .SetResultTransformer(Transformers.AliasToBean<MyEntity>())
    .List<MyEntity>();
会话
.CreateSQLQuery(“从MyFlag=1的实体中选择A、B、C”)
.SetResultTransformer(Transformers.AliasToBean())
.List();

最好使用QueryOver(),如果添加列等,则更安全。

您可以使用筛选器:-

在映射类定义上放置一个筛选器,但是这将影响所有返回的行

e、 g


...
或者,也可以将条件过滤器与QueryOver一起使用

<filter-def name="SetMyFlag">
    <filter-param name=":flag" type="System.Int"/>
</filter-def>

<class name="Domain.Model.MyEntity, Domain.Model" table="MyTable">
   ...
  <filter name="SetMyFlag" condition="(MyFlag=:flag)"/>
</class>

...
和使用:-

session.EnableFilter("SetMyFlag").SetParameter("flag", 1);
session.QueryOver<MyEntity>();
session.EnableFilter(“SetMyFlag”).SetParameter(“flag”,1);
session.QueryOver();

虽然我从未对未映射的列使用过条件筛选器,但这可能不起作用

我可以问一个问题吗?您是否使用了
启用过滤器
?如果是这样,您是否在不使用
的情况下尝试了它,并且只使用
会话.EnableFilter(“SetMyFlag”)
而不链接
设置参数(…)
。我很好奇,仅此而已!
session.EnableFilter("SetMyFlag").SetParameter("flag", 1);
session.QueryOver<MyEntity>();