如何用NHibernate子查询按关联TelecoCompany名称过滤Concept分页数据
解决方案
你可以通过以下方式实现基于TelecoCompany名称筛选Concept的子查询逻辑:
在PaginatedAsync方法的TelecoCompanyId判断分支中,替换为以下代码:
if (StringUtils.HasText(uFilter.TelecoCompanyId)) { // 子查询:获取所有符合名称匹配条件的TelecoCompany的Id var telecoSubQuery = QueryOver.Of<TelecoCompany>() .WhereRestrictionOn(tc => tc.CompanyName) .IsInsensitiveLike(uFilter.TelecoCompanyId, MatchMode.Anywhere) .Select(tc => tc.Id); // 只选择Id字段用于子查询匹配 // 主查询关联子查询,筛选TelecoCompany.Id在子查询结果中的Concept qo.Where(Subqueries.WhereProperty<Concept>(c => c.TelecoCompany.Id).In(telecoSubQuery)); }
代码说明:
- 子查询构建:创建
TelecoCompany的QueryOver,通过IsInsensitiveLike实现不区分大小写的模糊匹配,最后只选择Id字段,减少不必要的数据传输。 - 主查询关联:使用
Subqueries.WhereProperty让主查询的Concept.TelecoCompany.Id匹配子查询返回的Id集合,间接实现按关联公司名称过滤Concept数据,避免直接访问关联实体属性引发的NHibernate查询错误。
内容的提问来源于stack exchange,提问作者Fran Zabaleta
相关产品推荐
相关产品推荐

