2009-12-14 2 views
2

Есть ли способ фильтровать мой запрос NHibernate в поле SubType, прежде чем я попаду в базу данных, добавив ICriterion к моему выполнению DetachedCriteria?Фильтр NHibernate SubType с ICriterion

Мой код выглядит примерно так:

DetachedCriteria detachedCriteria = DetachedCriteria.For(typeof(MyObject)); 

    ProjectionList projectionList = Projections.ProjectionList(); 
    projectionList.Add(Projections.SqlProjection("{alias}.SubType as SubType", new string[] { "SubType" }, new IType[] { TypeFactory.GetAnsiStringType(15) })); 

    dc.SetProjection(projectionList); 
    dc.Add(Expression.Eq("SubType", "MYOBJECT")); 

    using(ISession session = ...) 

    { 

     ICriteria criteria = detachedCriteria.GetExecutableCriteria(session); 

    // Blows up because I don't know how to reference the SubType 
    // field with an ICriterion (Expression.Eq("SubType", "MYOBJECT")) 
     IList list = criteria.List(); 

    ... 

    } 

Хотя это может быть не правильный путь, чтобы достигнуть своей цели, я надеюсь, что это по крайней мере, возможно, потому что я не с нетерпением жду того, чтобы реорганизовать мои интерфейсы, которые ожидают/создают ICriterion. Я также не обязательно имею доступ к сеансу где-нибудь рядом, где мне нужно создать объект ICriterion (но у меня есть полный контроль над псевдонимом/именованием различных полей/таблиц NHibernate, которые будут использоваться).

ответ

5

Взял совсем немного прибегая к помощи вокруг, чтобы найти ответ на этот вопрос, вот он: http://derek-says.blogspot.com/2008/08/excluding-particular-derived-types-in.html

ICriteria crit = sess.CreateCriteria(typeof(Mammal)); 
    crit.Add(Expression.Not(Expression.Eq("class", typeof(DomesticCat)))); 
    List mammals = crit.List(); 
+0

мне нужно было что-то вроде этого! Спасибо! В моем случае мне нужна колонка для хранения 1 для определенного типа и 2 для другого! Законченное так: вар productTypeConditional = Projections.Conditional (Restrictions.Eq ("класс", TypeOf (холодильник)), \t \t \t Projections.Constant (ProductType.Refrigerator), \t \t \t Projections.Constant (ProductType .Кусок)); – cidico

 Смежные вопросы

  • Нет связанных вопросов^_^