3
答えを探して何時間も失敗しました。たぶん単純すぎると誰もそれについて話したことがなかった、おそらく私は検索するために適切な用語を使用していない。* OR *と* AND *句を使用して左結合でnHibernate QueryOver
基本的にLEFT JOINテーブルでOR句とAND句を使用する必要があります。そして私はそれをQueryOverでやりたいと思います。
SELECT customer.name, order.id
FROM customer
LEFT JOIN order ON (order.idcustomer = customer.id)
WHERE customer.active
AND (order.id IS NULL or (order.date >= :p0 AND order.date <= :p1)
WICHを意味し、すべてのアクティブな顧客とその注文を、しかし、唯一の秩序を作ったことがない人たちや、特定の期間の間の注文を持っている人:結果のSQLは次のようになります。
私はQueryOverに入ったこれに最も近い
されました:Order order = null;
var query = session.QueryOver<Customer>()
.Left.JoinAlias(x => x.Orders,() => order)
.Where(x => x.Active)
.And(() => order == null || (order.date >= date1 && order.date <= date2))
上記QueryOverが、でも実行される前に、「設定されていないリファレンス」私を与えます。私は、「制限」を使用することについての指示を見つけましたが、ORとANDのtogheterを使用するものはありませんでした。
何か助けていただきありがとうございます。
:
これは私に次のSQL(SQL Serverを)与えます!できます!私はそれを前に試みましたが、C#コンパイラは "Id"が長いので "order.Id == null"は常にfalseになりますので、woudn'tはうまく動作しないと思っていました。 –
@RogerKiihl:ああ、そうだね。幸いなことに、QueryOverが使用する式は実際には実行時に評価されず、解析されて最終的にSQLに変換されるため、ここで警告の種類を無視することは安全です。 –