首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ICriterion过滤NHibernate SubType

使用ICriterion过滤NHibernate SubType
EN

Stack Overflow用户
提问于 2009-12-15 04:22:00
回答 1查看 2.8K关注 0票数 2

有没有什么方法可以在命中数据库之前过滤SubType字段上的NHibernate查询,方法是将ICriterion添加到正在执行的DetachedCriteria中?

我的代码看起来像这样:

代码语言:javascript
复制
DetachedCriteria detachedCriteria = DetachedCriteria.For(typeof(MyObject));

    ProjectionList projectionList = Projections.ProjectionList();
    projectionList.Add(Projections.SqlProjection("{alias}.SubType as SubType", new string[] { "SubType" }, new IType[] { TypeFactory.GetAnsiStringType(15) }));

    dc.SetProjection(projectionList);
    dc.Add(Expression.Eq("SubType", "MYOBJECT"));

    using(ISession session = ...)

    {

       ICriteria criteria = detachedCriteria.GetExecutableCriteria(session);

    // Blows up because I don't know how to reference the SubType
    // field with an ICriterion (Expression.Eq("SubType", "MYOBJECT"))
       IList list = criteria.List();

    ...

    }

虽然这可能不是实现我的目标的正确方法,但我希望它至少是可能的,因为我不希望不得不重构我期望/生成ICriterion的接口。在需要创建ICriterion对象的位置附近,我也不一定有权访问会话(但我可以完全控制将要使用的各种NHibernate字段/表的别名/命名)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-04 22:31:55

为了找到这个问题的答案,我用了相当多的谷歌搜索,这里是:http://derek-says.blogspot.com/2008/08/excluding-particular-derived-types-in.html

代码语言:javascript
复制
   ICriteria crit = sess.CreateCriteria(typeof(Mammal));  
   crit.Add( Expression.Not( Expression.Eq("class", typeof(DomesticCat)) ) );  
   List mammals = crit.List();  
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1903246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档