Как я могу отфильтровать объект, вложенный в объект, по типу? - PullRequest
0 голосов
/ 20 июля 2010
        ICriteria iCriteria = DataAccessHelper.GetSession().CreateCriteria(typeof(T))
            .Add(Expression.Lt("Id", InitialIndex))
            .Add(Expression.Eq("Member", member))
            .Add(Expression.Eq("Action.class", typeof(U)))
            .SetMaxResults(MaxResult)
            .AddOrder(Order.Desc("Id"));

Я просто хочу создать критерий, который может фильтровать объект Action по его классу реализации.Но когда я запускаю это, выдается следующее исключение.

{"не удалось разрешить свойство: Action.class of: Classes.MemberAction"}

Класс MemberAction содержит:

public class MemberAction {

   Int64 Id;
   Member member;
   Action action;
   IDictionary<string,string> Attributes;
   etc.....
}

и класс Action является базой для 4 других классов

1 Ответ

0 голосов
/ 20 июля 2010
.Add(Expression.Lt("Id", InitialIndex))
.Add(Expression.Eq("Member", member))
.CreateAlias("Action", "Action") //here's the magic
.Add(Expression.Eq("Action.class", typeof(U)))
.SetMaxResults(MaxResult)
.AddOrder(Order.Desc("Id"))

Запросы критериев работают на неявном псевдониме. Они не разыменовывают отношения автоматически.

Добавленная строка создает псевдоним «Действие» (второй параметр, может быть любым именем, которое вы хотите назвать) в проецируемом свойстве «Действие».

Следующий оператор теперь относится к псевдо-свойству class объекта, на который ссылается «Действие» псевдоним .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...