Мой текущий проект использует NHibernate 3.0b1 и NHibernate.Linq.Query<T>()
API.Я довольно свободно владею LINQ, но у меня нет абсолютно никакого опыта работы с HQL или ICriteria API.Один из моих запросов не поддерживается API IQueryable, поэтому я предполагаю, что мне нужно использовать один из предыдущих API - но я не знаю, с чего начать.
Я попытался найти в Интернетехорошее руководство по началу работы с ICriteria, но единственные примеры, которые я нашел, либо слишком упрощены для применения здесь, либо слишком сложны для понимания.Если у кого-то есть хорошие учебные материалы для передачи, это будет очень полезно.
В любом случае объектная модель, к которой я обращаюсь, выглядит следующим образом (очень упрощенные, нерелевантные свойства опущены):
class Ticket {
IEnumerable<TicketAction> Actions { get; set; }
}
abstract class TicketAction {
Person TakenBy { get; set; }
DateTime Timestamp { get; set; }
}
class CreateAction : TicketAction {}
class Person {
string Name { get; set; }
}
A Ticket
имеет коллекцию TicketAction
, описывающую его историю.TicketAction
подтипы включают CreateAction
, ReassignAction
, CloseAction
и т. Д. Все заявки имеют добавленный CreateAction
в эту коллекцию при создании.
Этот запрос LINQ ищет заявки, созданные кем-то сданное имя.
var createdByName = "john".ToUpper();
var tickets = _session.Query<Ticket>()
.Where(t => t.Actions
.OfType<CreateAction>()
.Any(a => a.TakenBy.Name.ToUpper().Contains(createdByName));
Метод OfType<T>()
вызывает выброс NotSupportedException
.Могу ли я сделать это, используя вместо этого ICriteria?