如何将一组'And'过滤器附加到QueryOver查询?

时间:2011-09-20 13:54:56

标签: c# nhibernate queryover

我的方法有一个参数,它将决定执行where过滤器的列,所以为了使事情通用,我需要能够在哪个列上执行某些逻辑,我想在哪个列上执行。

是否可以将.And子句附加到给定的QueryOver<>查询?

public List<..> GetABC(SomeType type)
{
   NHibernateHelper.Session.QueryOver<Blah>()
   .Where(x => x.name = "")
   .And(x => x.a)  // if type == SomeType.A   then x.a, otherwise x.b (SomeType.B)
}

我怎么能这样做?

我知道在进行条件查询时,我可以创建一个条件,然后将其附加到查询中。

2 个答案:

答案 0 :(得分:2)

不确定

var query = NHibernateHelper.Session.QueryOver<Blah>()
                  .Where(x => x.name = "");

if(type == SomeType.A)
{
    query = query.And(x => x.a == ...);
}
else
{
    query = query.And(x => x.b == ... );
}

查询只会在“.List()”

之后执行

更新:我不知道你是否正在引用这样的内容(在你的评论中)

var query = NHibernateHelper.Session.QueryOver<Blah>()
                  .Where(x => x.name = "");


Expression<Func<Blah, bool>> typePredicate = null;


if(type == SomeType.A)
{
    typePredicate = x => x.a == ...;
}
else
{
    typePredicate = x => x.b == ...;
}


query = query.Where(typePredicate);

或者你可能对分离查询等内容更感兴趣?

答案 1 :(得分:0)

我不确定我完全理解这个问题......但是这样的事情呢?

public List<..> GetABC(SomeType type)
{
   NHibernateHelper.Session.QueryOver<Blah>()
   .Where(x => x.name = "")
   .And(x => typeof(type) == SomeType.A ? x.a : x.b)  
}