NHibernate:将计算字段添加到查询结果中

时间:2013-12-15 18:38:21

标签: asp.net nhibernate

我继承了一个基于NHibernate构建的ASP.NET网站,我没有经验。我需要将基于相关表中的列的计算字段添加到现有查询。在SQL中,使用相关子查询可以很容易地完成:

select
  field1,
  field2,
  (select count(field3) from table2 where table2.table1ID = table1.ID) calc_field
from
  table1
where
  [criteria...]

不幸的是,当然,我不能使用SQL。所以实际上,我有三个相关的问题:

  1. 通过NHibernate使用的界面,基类等网页来查找我需要添加字段的对象的最佳方法是什么?
  2. 找到该对象后,除了向对应于新字段的对象添加公共属性外,还需要做什么?
  3. 在引用查询中的相关对象方面是否存在任何特定于NHibernate的注意事项?
  4. 以下是执行搜索的现有代码:

    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;
    }
    

    我感谢有经验的冬眠员的任何建议。

    谢谢, 麦克

1 个答案:

答案 0 :(得分:0)

如果您只对返回包含计算值的查询感兴趣,您仍然可以在NHibernate中调用存储过程,并将结果映射到POCO,方法与映射CRUD操作表的方式相同;显然只读而不是可更新。

查看ISession.CreateSQLQuery方法;如果你需要,我可以从我的一个项目中发布一个例子。