2014-10-29 121 views
1

我有一個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)。這甚至有可能嗎?

回答

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>(); 
+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