编程语言
首页 > 编程语言> > C#-使用QueryOver的NHibernate OR

C#-使用QueryOver的NHibernate OR

作者:互联网

我正在尝试使用QueryOver使用NHibernate 3.3创建带有OR子句的简单选择.因此,对于一个简单的选择,例如:

Select x,y,z from myTable where x='one' or y = 'two' or z = 'three'

我想出了这个:

IList<MyTable> list = session.QueryOver< MyTable >()
.WhereRestrictionOn(
   Restrictions.Or(Restrictions.On< MyTable >(tab => tab.x == "One"),
                   Restrictions.On< MyTable >(tab => tab.y == "Two") )
 );

它无法编译,并且TBH我怀疑我以任何方式都走错了方向.

解决方法:

这种语法应该解决它

var list = session.QueryOver<MyTable>()
    .Where(
        Restrictions.Or(
          Restrictions.Eq(Projections.Property<MyTable>(tab => tab.x), "One"),
          Restrictions.Eq(Projections.Property<MyTable>(tab => tab.y), "Two")
        )
    )
    .List<MyTable>()

如果我们想要更多,则析取是我们实现多重或的方法:

var list = session.QueryOver<MyTable>()
    .Where(Restrictions.Disjunction()
      .Add(Restrictions.Eq(Projections.Property<MyTable>(tab => tab.x), "One"))
      .Add(Restrictions.Eq(Projections.Property<MyTable>(tab => tab.x), "Two"))
      .Add(Restrictions.Eq(Projections.Property<MyTable>(tab => tab.x), "xxx"))
    )
    .List<MyTable>()

标签:queryover,nhibernate,c
来源: https://codeday.me/bug/20191121/2048991.html