代码之家  ›  专栏  ›  技术社区  ›  reach4thelasers

NHibernate:将icriteria转化为分离的标准

  •  3
  • reach4thelasers  · 技术社区  · 15 年前

    任何人都知道如何将icriteria转换成分离的标准。我需要使用现有的icriteria作为子查询的一部分,使用:

    .Add(Subqueries.PropertyIn("Name", myDetachedCriteriaSubquery))
    

    是否有任何方法可以将icriteria转换为分离标准。我接受“不”,并提供可靠的参考。

    3 回复  |  直到 15 年前
        1
  •  3
  •   cbp    13 年前

    根据Mattk的回答,可以继承DetachedCriteria以访问其构造函数:

    public class ConvertedDetachedCriteria : DetachedCriteria
    {
        public ConvertedDetachedCriteria(ICriteria criteria) 
            : base((CriteriaImpl) criteria, criteria)
        {
            var impl = (CriteriaImpl) criteria;
            impl.Session = null;
        }
    }
    

    现在您可以编写这样的代码:

    var criteria = Session.CreateCriteria<Person>()
       .Add(Restrictions.Eq("Name", "John"));
    
    var clonedDetachedCriteria = new ConvertedDetachedCriteria(criteria);
    
    var newCriteria = Session.CreateCriteria<Person>()
        .SetProjection(Projections.SubQuery(clonedDetachedCriteria))
        .List<string>();
    

    免责声明:我只接受了最低限度的NH2测试…不保证它能工作或有任何用途。

        2
  •  2
  •   animuson Hemanshu    13 年前
    var clonedDetachedCriteria = new ConvertedDetachedCriteria(CriteriaTransformer.Clone(criteria));
    

    如果条件会话为空,则创建“object references..”异常。

    使用 CriteriaTransformer.Clone(criteria)

        3
  •  1
  •   mattk    14 年前

    DetachedCriteria有一个采用ICriteria的构造函数,但它是内部的。标准变压器使用。也许你可以实现类似的东西?

    推荐文章