NHibernate与WHERE条件成对查询
问题描述:
我有一个NHibernate对象集合ConcurrentBag<Event>
与属性project_id
和name
。我想从另一个表中匹配这些属性的一组不相关的(模式明智的)对象。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子句中是基于每个Event
在ConcurrentBag<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>();
如果值是字面上的肯定,但我不知道我是怎么从“IEnumerable”的值中获取Where(...)过滤器。也许这个问题不清楚,我会更新。 – AndySavage 2014-10-29 18:02:52
我明白了 - 我会更新我的问题。 – 2014-10-29 18:03:43
@AndySavage:更新 - 使用QueryOver这可能比LINQ更容易。 – 2014-10-29 18:13:09