C# 如何附加一套';和';过滤到查询覆盖查询?
我的方法有一个参数,它将决定对哪个列执行where过滤器,因此为了使事情变得通用,我需要能够对哪个列执行where过滤器 是否可以将.And子句附加到给定的QueryOver查询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) } 我怎么能这样做 我知道在执行
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);