NHibernate成对查询WHERE条件

时间:2014-10-29 17:56:31

标签: linq nhibernate

我有一组NHibernate对象ConcurrentBag<Event>,其属性为project_idname。我想从另一个表中找到一组不相关的(模式明智的)对象,这些对象也匹配这些属性。

我期望的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)。这甚至可能吗?

1 个答案:

答案 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>();