我有一张桌子看起来像:
CREATE TABLE [dbo].[Order](
[OrderID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NOT NULL,
[ProductID] [int] NOT NULL,
[OrderDate] [datetime] NOT NULL,
[UnitPrice] [money] NOT NULL,
[Quantity] [float] NOT NULL,
[Comment] [nvarchar](200) NULL,
) ON [PRIMARY]
我使用 NHibernate 来构建订单历史搜索,同时我还利用 NHibernate.Search 来搜索评论字段(由于全文搜索的原因)。
我可以构建 Linq 查询来搜索 UserID、ProductID、OrderDate 字段等:
IQueryable<Order> orders = orderRecordRepository.GetList();
orders = orders.Where(o => o.User.Id == 1 && o.Product.Id == 100 &&
o.OrderDate <= DateTime.Now);
现在我提出一个问题,如果我需要包含评论字段搜索,我需要创建另一个全文会话,例如:
IFullTextSession fullTextSession = Search.CreateFullTextSession(this.session);
return fullTextSession.CreateFullTextQuery<T>(fulltextQuery).List<T>();
第一个查询的行为似乎与第二个查询是隔离的。如果我需要使用 UserID、ProductID、OrderDate + Comments 中的一些文本搜索订单,我必须执行 2 次单独的搜索以获得 2 个不同的列表,然后找到重叠的结果以获得最终列表。似乎效率很低。
我只是想知道你在这种情况下的做法是什么。