我有一组NHibernate对象ConcurrentBag<Event>
,其属性为project_id
和name
。我想从另一个表中找到一组不相关的(模式明智的)对象,这些对象也匹配这些属性。
我期望的SQL看起来像:
SELECT * FROM table WHERE (project_id = 1 AND name = 'foo')
OR (project_id = 2 AND name = 'foo')
OR (project_id = 1 AND name = 'bar')
... etc
WHERE子句中的值对基于Event
中每个ConcurrentBag<Event>
的值。
我不知道如何使用NHibernate查询(理想情况下使用LINQ)。这甚至可能吗?
答案 0 :(得分:1)
对于LINQ我认为这很难,但是如果使用QueryOver,使用WHERE
动态构建Restrictions.Disjunction
子句很容易:
var disjunction = Restrictions.Disjunction();
foreach (Event evt in events)
{
disjunction.Add(Restrictions.Where<Table>(
t => t.project_id == evt.project_id && t.name == evt.name);
}
var rows = session.QueryOver<Table>()
.Where(disjunction)
.List<Table>();