有關限制的小問題。休眠限制(和/或)
我有查詢這樣的:
Where A in(1,6) and (B not like 'Value%' or B not like 'ValueII%')
問題是磁場B不包含一個固定的值,可以是一個或多個。
請,(N)Hibernate專家 - 幫助我,我無法找到一個工作解決方案。任何幫助是極大的讚賞!
有關限制的小問題。休眠限制(和/或)
我有查詢這樣的:
Where A in(1,6) and (B not like 'Value%' or B not like 'ValueII%')
問題是磁場B不包含一個固定的值,可以是一個或多個。
請,(N)Hibernate專家 - 幫助我,我無法找到一個工作解決方案。任何幫助是極大的讚賞!
您可以使用析取來處理或案例,因爲這樣的:
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嗎?
問題是我不知道我有多少限制,我需要使用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>();
感謝您的幫助
看到我上面編輯的答案。 – 2010-06-21 19:28:16
是什麼「字段中不包含固定值」是什麼意思? – 2010-06-21 15:10:59