我的方法有一个参数,它将决定执行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)
}
我怎么能这样做?
我知道在进行条件查询时,我可以创建一个条件,然后将其附加到查询中。
答案 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)
}