【发布时间】:2011-08-14 18:34:27
【问题描述】:
我正在使用 NHibernate 2,我希望能够执行以下操作:
我有许多 DAO 类型。它们都是BaseDAO 的子类,但它们在NHibernate 映射中根本不相关。 (这些子类并不都有共同的属性。)
我想编写一个方法来搜索我所有的 DAO 类型并返回一个包含所有匹配项的 List<BaseDAO>。
方法签名应该类似于:
public IList<BaseDAO> GlobalSearch(string searchTerm, int startIdx, int maxRows);
查询需要检查searchTerm 与域类型的所有string 属性。我们目前一次只针对一种类型执行此操作,使用的是一种构建Disjunction 的方法来搜索给定类型的所有属性。
private Disjunction BuildDisjunction(string searchTerm, Type type)
我想组合我所有域类型的所有析取并创建一个查询,该查询将返回BaseDAO 的列表。
这是我目前所拥有的:
public IList<DomainBase> GlobalSearch(string searchTerm,
int startIndex, int maxRows)
{
ICriteria crit = GetCriteria<BaseDAO>();
foreach (Type t in GetAllDomainTypes())
{
Disjunction disj = BuildDisjunction(searchTerm, t);
// somehow use this disjunction
}
crit
.AddOrder(Order.Asc("DispName"))
.SetFirstResult(startIdx)
.SetMaxResults(maxRows);
return crit.List<BaseDAO>(); ;
}
这可能吗?如何修改/完成上述方法以实现我需要的功能?
【问题讨论】:
-
我认为这不可能。想想你将如何在 SQL 中做到这一点,如果不可能在一个 SQL 查询中做到,那么在 NHibernate 中也将不可能做到。
-
@Vadim,这有点让我害怕。不幸的是,我对 SQL 的了解太少,不知道这是否可能。
-
您在搜索基类的属性吗?如果是这样,则可以将每个查询生成到 MultiCritera 中,执行它并将所有结果填充回列表中。
-
@Phill,你能告诉我怎么做吗?但不是。我正在搜索所有子类的所有公共字符串属性。
-
可能需要进行一些反思才能做到这一点,我几个小时后下班回家,我会看看我是否可以写一个例子,看看它是否是事实可能,我有 98% 的把握。会让你知道的。
标签: c# nhibernate criteria