NHibernate: Convert an ICriteria to a DetachedCriteria
Asked Answered
J

3

3

Anyone know how to convert an ICriteria into a DetachedCriteria. I need to use an existing ICriteria as part of a subquery using:

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

Is there any way to convert an ICriteria to a DetachedCriteria. I will accept 'no' with a credible reference.

Jinny answered 18/11, 2009 at 3:12 Comment(0)
M
3

Following on from mattk's answer, you can inherit DetachedCriteria to access its constructors:

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

Now you can write code like this:

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>();

Disclaimer: I've only subject this to minimal testing in NH 2... no guarantees it will work or be of any use.

Mvd answered 4/10, 2011 at 4:54 Comment(0)
A
2
var clonedDetachedCriteria = new ConvertedDetachedCriteria(CriteriaTransformer.Clone(criteria));

if Your criteria session null , create "object referans.." exception.

use CriteriaTransformer.Clone(criteria)

Atone answered 12/10, 2011 at 10:5 Comment(0)
O
1

DetachedCriteria has a constructor which takes an ICriteria but it is internal. It is used by CriteriaTransformer. Perhaps you could implement something similar?

Ogawa answered 28/7, 2010 at 12:45 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.