NHibernate与WHERE条件成对查询

问题描述:

我有一个NHibernate对象集合ConcurrentBag<Event>与属性project_idname。我想从另一个表中匹配这些属性的一组不相关的(模式明智的)对象。NHibernate与WHERE条件成对查询

我希望会是这个样子的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子句中是基于每个EventConcurrentBag<Event>值。

我不知道如何查询与NHibernate(理想与LINQ)。这甚至有可能吗?

这将是很难与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>(); 
+0

如果值是字面上的肯定,但我不知道我是怎么从“IEnumerable”的值中获取Where(...)过滤器。也许这个问题不清楚,我会更新。 – AndySavage 2014-10-29 18:02:52

+0

我明白了 - 我会更新我的问题。 – 2014-10-29 18:03:43

+0

@AndySavage:更新 - 使用QueryOver这可能比LINQ更容易。 – 2014-10-29 18:13:09