Fluent NHibernate - 过滤结果集

发布于 2024-11-26 01:47:41 字数 381 浏览 1 评论 0原文

FNH 新手问题 -

我有两个对象 RR 和 TT 定义如下:

public class RR
{
   Id
   Name
   TT_Id //corresponds to TT.Id
}

public class TT
{
   Id
   Name
   Type   
}

我想按照以下 SQL 过滤来自 RR 的记录:

SELECT RR.*
FROM RR 
LEFT OUTER JOIN TT ON RR.TT_Id = TT.Id
WHERE TT.Type <> 7 

任何人都可以指导我如何添加过滤条件以在 NH 中实现上述目标。

谢谢你!

FNH Newbie question -

I have two objects RR and TT defined as following:

public class RR
{
   Id
   Name
   TT_Id //corresponds to TT.Id
}

public class TT
{
   Id
   Name
   Type   
}

I want to filter records from RR as per following SQL:

SELECT RR.*
FROM RR 
LEFT OUTER JOIN TT ON RR.TT_Id = TT.Id
WHERE TT.Type <> 7 

Can anyone please guide how can I add filter criteria to achieve above in NH.

Thank you!

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

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

发布评论

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

评论(1

椵侞 2024-12-03 01:47:41

为什么RR中有TT_Id而不是TT本身?在我看来,这会让很多事情变得比需要的更加困难。

如果它引用 TT 那么

resultlist = session.CreateCriteria<RR>()
    .CreateCriteria("TT")
    .Add(Restrictions.Not(Restrictions.Eq("Type", 7)))
    .List<RR>();

否则

var subquery = DetachedCriteria.For<TT>()
    .Add(Restrictions.Not(Restrictions.Eq("Type", 7)))
    .SetProjection(Projections.Id());

resultlist = session.CreateCriteria<RR>()
    .Add(Subqueries.In("TT_id", subquery)))
    .List<RR>();

或者

IList<object[]> resultlist = session.CreateSqlQuery("SELECT RR.* FROM RR LEFT OUTER JOIN TT ON R.TT_Id = TT.Id WHERE TT.Type <> 7 ")
    .List().Cast<object[]>();

// hydrate RR yourself here

why you have TT_Id and not TT itself in RR? IMO it will make a lot of things more difficult than needed.

if it would reference to TT then

resultlist = session.CreateCriteria<RR>()
    .CreateCriteria("TT")
    .Add(Restrictions.Not(Restrictions.Eq("Type", 7)))
    .List<RR>();

otherwise

var subquery = DetachedCriteria.For<TT>()
    .Add(Restrictions.Not(Restrictions.Eq("Type", 7)))
    .SetProjection(Projections.Id());

resultlist = session.CreateCriteria<RR>()
    .Add(Subqueries.In("TT_id", subquery)))
    .List<RR>();

or

IList<object[]> resultlist = session.CreateSqlQuery("SELECT RR.* FROM RR LEFT OUTER JOIN TT ON R.TT_Id = TT.Id WHERE TT.Type <> 7 ")
    .List().Cast<object[]>();

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