C# 如何附加一套';和';过滤到查询覆盖查询?

C# 如何附加一套';和';过滤到查询覆盖查询?,c#,nhibernate,queryover,C#,Nhibernate,Queryover,我的方法有一个参数,它将决定对哪个列执行where过滤器,因此为了使事情变得通用,我需要能够对哪个列执行where过滤器 是否可以将.And子句附加到给定的QueryOver查询 public List GetABC(SomeType类型) { NHibernateHelper.Session.QueryOver() .其中(x=>x.name=“”) .和(x=>x.a)//如果type==SomeType.a,那么x.a,否则x.b(SomeType.b) } 我怎么能这样做 我知道在执行

我的方法有一个参数,它将决定对哪个列执行where过滤器,因此为了使事情变得通用,我需要能够对哪个列执行where过滤器

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

public List GetABC(SomeType类型)
{
NHibernateHelper.Session.QueryOver()
.其中(x=>x.name=“”)
.和(x=>x.a)//如果type==SomeType.a,那么x.a,否则x.b(SomeType.b)
}
我怎么能这样做


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

我不确定我是否完全理解这个问题。。。但是像这样的

public List<..> GetABC(SomeType type)
{
   NHibernateHelper.Session.QueryOver<Blah>()
   .Where(x => x.name = "")
   .And(x => typeof(type) == SomeType.A ? x.a : x.b)  
}
public List GetABC(SomeType类型)
{
NHibernateHelper.Session.QueryOver()
.其中(x=>x.name=“”)
和(x=>typeof(type)==SomeType.A?x.A:x.b)
}
当然可以

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 == ... );
}
var query=NHibernateHelper.Session.QueryOver()
。其中(x=>x.name=“”);
if(type==SomeType.A)
{
query=query.And(x=>x.a==…);
}
其他的
{
query=query.And(x=>x.b==…);
}
查询将仅在“.List()”之后执行

更新:我不知道你是否在评论中提到了类似的东西

var query=NHibernateHelper.Session.QueryOver()
。其中(x=>x.name=“”);
表达式typePredicate=null;
if(type==SomeType.A)
{
类型谓词=x=>x.a==。。。;
}
其他的
{
类型谓词=x=>x.b==。。。;
}
query=query.Where(类型谓词);

或者您可能对分离查询之类的内容更感兴趣?

是否可以将.And部分拆分出来,然后将其附加到查询中?是的,类似这样的内容,老实说,我不确定我问的是什么,因为我不记得我是在用条件还是别的什么进行分离查询。QueryOver中的分离查询非常简单。您只需要这样做:var query=NHibernate.criteria.QueryOver.Of();
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 == ... );
}
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);