Let's say I have a SQL query I need to render using nHibernate. The SQL query's WHERE clause consists of three OR statements, each of which contains a list of conditions. For example:
SELECT *
FROM MyTable
WHERE
(OrderId = 1 and ItemId = 100)
OR
(OrderId = 2 and ItemId = 200)
OR
(OrderId = 3 and ItemId = 300)
Using nHibernate's Criteria syntax, I could use a disjunction to implement this:
var disjunction = Restrictions.Disjunction();
foreach (var tuple in OrdersAndLineItems)
{
var conjunction = Restrictions.Conjunction();
var order = tuple.Item1;
var lineitem = tuple.Item2;
conjunction.Add(Restrictions.Eq("OrderId", order.Id));
conjunction.Add(Restrictions.Eq("LineItemId", lineitem.Id));
disjunction.Add(conjunction);
}
var result = Session.CreateCriteria<SomeClass>().Add(disjunction).ToList();
How would I write the same type of query using the QueryOver syntax in nHibernate 3.x?
Never mind -- I stumbled across an earlier StackOverflow post that provided the answer I was looking for, shortly after I posted. Here's my original example rewritten using QueryOver syntax:
var disjunction = Restrictions.Disjunction();
foreach (var tuple in OrdersAndLineItems)
{
var conjunction = Restrictions.Conjunction();
var order = tuple.Item1;
var lineitem = tuple.Item2;
conjunction.Add(Restrictions.On<SomeClass>(x => x.OrderId).Equals(order.Id));
conjunction.Add(Restrictions.On<SomeClass>(x => x.LineItemId).Equals(lineitem.Id));
disjunction.Add(conjunction);
}
var result = Session.CreateCriteria<SomeClass>().Add(disjunction).ToList();