Фильтрация объектов с использованием ActiveRecord, NHibernate, DetachedCriteria - PullRequest
0 голосов
/ 14 июня 2011

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

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

PropertyContainer
 Id int

PropertyValue
 Id             int
 ContainerId    int
 Value          real

Мне нужно выбрать объект PropertyContainer со значениями из таблицы PropertyValue, соответствующими некоторому условию (например, свойство с Id = 1 и значением> 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?

1 Ответ

1 голос
/ 15 июня 2011

если 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));
...