Фильтрация объектов с использованием ActiveRecord, NHibernate, DetachedCriteria

C # 3.0, Nhibernate 2.1.2, Castle ActiveRecord 2.1, WinXP 32

У меня проблема с фильтрующими элементами с ActiveRecord и DetachedCriteria. Есть 2 таблицы, одна из которых содержит объекты для фильтрации (PropertyContainer), а другая содержит значения динамических свойств, установленных для этого объекта (PropertyValue).

PropertyContainer
 Id int

PropertyValue
 Id             int
 ContainerId    int
 Value          real

Мне нужно выбрать объект PropertyContainer со значениями из таблицы PropertyValue, соответствующими некоторому условию (например, свойство с Id = 1 и Value> 2). Я хотел бы сделать это с помощью DetachedCriteria, я пытаюсь написать что-то вроде этого:

var detachedCriteria = DetachedCriteria.For(typeof(PropertyContainer));

detachedCriteria.SetProjection(
    Projections.SqlProjection(@"select Value from PropertyValue where Id=1"),
    new[] { "ExternalProperty" }, 
    new[] { NHibernateUtil.Double }));  

detachedCriteria.Add(Expression.Ge("ExternalProperty",2));

var filteredItems = PropertyContainer.SlicedFindAll(0,100,detachedCriteria);

Затем этот вызов выполняется. Я получаю следующую ошибку: «не удалось разрешить свойство: ExternalProperty of: PropertyContainer»

Вопрос в том:

  1. Что плохого в таком подходе?
  2. Как правильно выполнять фильтрацию по динамическому набору свойств с использованием ActiveRecord / NHibernate и DetachedCriteria?

person Alex    schedule 14.06.2011    source источник


Ответы (1)


если PropertyValue выглядит так:

class PropertyValue
{
    public virtual int Id { get; set; }
    public virtual double Value { get; set; }
}

ты можешь сделать:

DetachedCriteria.For<PropertyContainer>()
    .CreateAlias("PropertyValues", "prop")
    .Add(Restrictions.Ge("prop.Value", 2))
    .Add(Restrictions.Eq("prop.Id", 1));
person Firo    schedule 15.06.2011