Как прикрепить набор фильтров «И» к запросу QueryOver? - PullRequest
1 голос
/ 20 сентября 2011

В моем методе есть параметр, который будет определять, для какого столбца следует выполнять фильтр where, поэтому, чтобы сделать все более общим, мне нужно иметь возможность выполнить некоторую логику, для какого столбца я хочу выполнить 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 ]

2 голосов
/ 20 сентября 2011

Конечно.

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);

Или, возможно, вас больше интересует что-то вроде отдельных запросов?

0 голосов
/ 20 сентября 2011

Не уверен, что полностью понимаю вопрос ... но как-то так?

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