ORDAシリーズが続きます!今回のブログでは、エンティティセレクションにおける論理演算子の使い方を紹介します。
これらの演算子は、従来の4Dセットと同様に、2つのエンティティセレクション間の交差、結合、差異を取得することができます。
Classic 4Dでは、複数のクエリ結果に対して論理演算を行うためにセットを使用します。各クエリの後にセットを作成し、セットに対して論理演算を行い、最後に結果セットで関係するテーブルの現在の選択範囲を更新する必要があります。ちょっと重いですね。ありがたいことに、ORDAでは かなり軽くなってきています!各クエリは、論理演算子を直接適用することができるエンティティセレクションを 提供します!
ORDAは、2つのエンティティセレクションに対して論理演算を実行するための以下のメソッドを提供します。
– and(): 2つのエンティティセレクション(両方に属するエンティティ)の交差点を取得します。
– or(): 2つのエンティティセレクション間の和集合を取得する (一方に属するエンティティ、または他方に属するエンティティ)
– minus(): 2 つのエンティティセレクション間の差を取得します (一方に属し、他方に属さないエンティティ)
これらのメソッドは、エンティティセレクションと個々のエンティティに適用することもできます。
例
例は百聞は一見にしかず!ここでは、従業員とその食べ物の好みについて見てみましょう。
CLASSIC 4D:
//A named selection "meat" is created before
// ...
QUERY BY ATTRIBUTECLEAR SET([Employee];[Employee]food; "fish";=;True)
CREATE SET ([Employee]; "fish")
USE NAMED SELECTION ("meat")
CREATE SET ([Employee]; "meat")
UNION ("fish"; "meat"; "result")
USE SET ("result")
("meat")CLEAR SET("fish")
CLEAR SET ("result")
ORDAです。
ここでは、パラメータとしてエンティティセレクションを受け取るメソッドを持っています。$eatingMeat のエンティティセレクションと$eatingFish のエンティティセレクションの和を返す。
C_OBJECT$result($eatingFish;$1;$eatingMeat;$result)
$eatingMeat :=$1
//Get employees eating fish
$eatingFish :=ds.Employee.query("food.fish=:1";True)
//Get the union of the 2 entity selections $eatingMeat and $eatingFish
:=$eatingMeat.or($eatingFish)
$0 :=
。$result