【发布时间】:2010-10-29 16:48:44
【问题描述】:
我当前的项目正在使用 NHibernate 3.0b1 和 NHibernate.Linq.Query<T>() API。我非常精通 LINQ,但我完全没有使用 HQL 或 ICriteria API 的经验。 IQueryable API 不支持我的一个查询,所以我认为我需要使用以前的 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; }
}
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 吗?
【问题讨论】:
标签: nhibernate linq-to-nhibernate nhibernate-criteria