Hibernate限制(和/或)

时间:2010-06-21 14:15:16

标签: c# nhibernate criteria

关于限制的小问题。

我有这样的查询:

Where  A in(1,6) and (B not like 'Value%' or B not like 'ValueII%')

问题是字段B不包含固定值,可以是一个或多个。

请,(N)Hibernate专家 - 帮助我,我找不到一个有效的解决方案。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

您可以使用析取来处理OR案例,如下所示:

IList results = session.CreateCriteria(typeof(MyType))
    .Add(Restrictions.In("A", new [] {1, 6}))
    .Add(Restrictions.Disjunction()
        .Add.Restrictions.Not(Restrictions.Like("B", "Value%"))
        .Add.Restrictions.Not(Restrictions.Like("B", "ValueII%")))
    .List<MyType>();

如果您需要处理for循环中的析取条件(根据您的后续行动),您可以使用以下代码:

ICriteria query = session.CreateCriteria(typeof(MyType));
query.Add(Restrictions.In("A", new [] {1, 6}))

Disjunction disjunction = Restrictions.Disjunction();
foreach (var value in values) {
    disjunction.Add(Restrictions.Not(Restrictions.Like(value, "Value%")));
    disjunction.Add(Restrictions.Not(Restrictions.Like(value, "ValueII%")));
}
query.Add(disjunction);

IList results = query.List<MyType>();

话虽如此,我认为你的逻辑可能存在缺陷。如果您正在测试这些值“不匹配一个模式或不匹配另一个模式”,那么条件将始终评估为true(除非模式相同)。你确定要在这里使用OR吗?

答案 1 :(得分:0)

问题是我不确切知道有多少限制,我需要在分离时使用FOR。

类似的东西:

IList results = session.CreateCriteria(typeof(MyType))
.Add(Restrictions.In("A", new [] {1, 6}))
.Add(Restrictions.Disjunction());
 for(int i = 0, i < value.Lenght;i++){
    .Add.Restrictions.Not(Restrictions.Like("B", "Value%"));
    .Add.Restrictions.Not(Restrictions.Like("B", "ValueII%"));
 }
.List<MyType>();

感谢您的帮助