NHibernate:将 ICriteria 转换为 DetachedCriteria

发布于 2024-08-11 07:36:47 字数 237 浏览 7 评论 0原文

任何人都知道如何将 ICriteria 转换为 DetachedCriteria。我需要使用现有的 ICriteria 作为子查询的一部分:

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

是否有任何方法可以将 ICriteria 转换为 DetachedCriteria。如果有可靠的参考资料,我会接受“不”。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

兔小萌 2024-08-18 07:36:47

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

免责声明:我仅在 NH 2 中对此进行了最少的测试...不保证它会工作或有任何用途。

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.

海螺姑娘 2024-08-18 07:36:47
var clonedDetachedCriteria = new ConvertedDetachedCriteria(CriteriaTransformer.Clone(criteria));

如果您的条件会话为 null ,则创建“对象引用..”异常。

使用 CriteriaTransformer.Clone(criteria)

var clonedDetachedCriteria = new ConvertedDetachedCriteria(CriteriaTransformer.Clone(criteria));

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

use CriteriaTransformer.Clone(criteria)

若无相欠,怎会相见 2024-08-18 07:36:47

DetachedCriteria 有一个构造函数,它接受 ICriteria,但它是内部的。它由 CriteriaTransformer 使用。也许你可以实现类似的东西?

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文