【发布时间】:2010-11-17 01:10:10
【问题描述】:
我有一个应用程序,它允许根据几个不同的标准(总共大约 20 种不同的方法)搜索某个实体。我希望能够组合多个搜索的结果以生成单个结果集。
例如:
results = (entities from search 1 AND entities from search 2) OR (entities from search 3)
让我们假设搜索在本质上足够复杂,因此不可能将它们组合成一个逻辑查询(由于需要查询复杂的关系等)。
我们还假设所涉及的实体数量(很可能)使任何类型的内存策略都不可行。
我最初的想法是这样的:
1) 分别执行搜索,从每个搜索中获取匹配的“实体 id”列表,然后根据这些执行“根级”搜索。
例如:
select * from entity e
where
(e.Id in (search 1 id list) AND e.Id in(search 2 id list))
OR e.Id in (search 3 id list)
2) 执行外部查询,根据我的(复杂)子查询返回的结果选择实体。
例如:
select * from entity e
where (e.Id in (select e1.id from entity e1 where ...) AND e.Id in (select e2.id from entity e2 where...))
OR e.Id in (select e3.id from entity e3 where...)
显然,为了便于说明,这些示例被大大简化了;单个查询将涉及更多,它们的组合将是任意的(我只是在这里举例说明了一个代表性示例)。
我很想听听其他人如何处理这种情况的建议。我当然愿意接受我在上面没有探索过的任何可能性。
作为参考,这是一个使用由 SQL Server 2008 R2 数据库支持的 NHibernate ORM 的 .NET 应用程序。
我已经决定为此使用 hql 或本机 sql,因为 ICriteria 或 Linq 不提供执行单个查询所需的灵活性,也不提供所需的组合操作。
【问题讨论】:
标签: sql nhibernate sql-server-2008 search