gpt4 book ai didi

c# - nHibernate ICriteria 加入条件

转载 作者:太空狗 更新时间:2023-10-30 01:12:04 25 4
gpt4 key购买 nike

我正在尝试使用 ICriteria 创建具有连接的查询健康)状况。我尝试生成的 SQL 应该如下所示

SELECT c.ClientID
FROM Client c
LEFT OUTER JOIN ClientContact t on c.ClientID = t.ClientID AND
t.ContactType = 'Email'

如果我使用这样的标准

m_ClientRepository.QueryAlias("client")
.CreateCriteria("client.Contacts", "c", JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("c.ContactType", ContactType.Email));

它将在下面生成我不想要的 sql。

SELECT c.ClientID
FROM Client c
LEFT OUTER JOIN ClientContact t on c.ClientID = t.ClientID
WHERE t.ContactType = 'Email'

如果无法使用 ICriteria,是否可以使用 ICriteria 或 HQL 执行此操作?

编辑:我发现 nHibernate 2.1(我正在使用)现在可以了 allow this .虽然不确定 ICriteria,这是我的偏好。

最佳答案

我不会这样做。左外连接让我们 NH 无论如何加载客户端,电子邮件联系人的过滤器将只加载电子邮件联系人......直到它初始化联系人集合并加载所有内容。

如果它只加载电子邮件联系人,它最终会在内存中成为不完整的对象。这通常不是一个好主意,尤其是当您还在同一事务中更改数据时。

在您的情况下,我会尝试直接加载电子邮件联系人并从联系人导航到客户。

session.CreateCriteria(typeof(Contact))
.Add(Restrictions.Eq("c.ContactType", ContactType.Email));

关于c# - nHibernate ICriteria 加入条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1325188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com