我继承了一个基于NHibernate构建的ASP.NET网站,我没有经验。我需要将基于相关表中的列的计算字段添加到现有查询。在SQL中,使用相关子查询可以很容易地完成:
select
field1,
field2,
(select count(field3) from table2 where table2.table1ID = table1.ID) calc_field
from
table1
where
[criteria...]
不幸的是,当然,我不能使用SQL。所以实际上,我有三个相关的问题:
以下是执行搜索的现有代码:
public INHibernateQueryable<C> Search(ISearchQuery query, string sortField)
{
_session = GetSession();
var c = _session.Linq<C>();
c.Expand("IP");
c.Expand("LL");
c.Expand("LL.Address");
c.Expand("LL.Address.City");
c.Expand("LL.Address.City.State");
c.Expand("LL.Address.City.County");
c.Expand("CE");
c.Expand("IC");
c.Expand("AR");
c.Expand("ER");
c.Expand("Status");
var res = _SearchFilters
.Where(x => x.ShouldApply(query))
.Aggregate(c, (candidates, filter) => (INHibernateQueryable<C>) filter.Filter(candidates, query));
res = SortSearch(res, sortField);
return res;
}
我感谢有经验的冬眠员的任何建议。
谢谢, 麦克
答案 0 :(得分:0)
如果您只对返回包含计算值的查询感兴趣,您仍然可以在NHibernate中调用存储过程,并将结果映射到POCO,方法与映射CRUD操作表的方式相同;显然只读而不是可更新。
查看ISession.CreateSQLQuery
方法;如果你需要,我可以从我的一个项目中发布一个例子。