LLBLGen にはいくつかの中心的な概念があり、コードのサンプルと同等の Sql クエリを使用して説明します。
- Predicate、IPredicate、および PredicateExpression: これらは Where 句に変換されます。PredicateExpression は、AND および OR で結合された複数の述語で構成される複雑な述語と考えることができます。
注: 現在 LLBLGen にアクセスできないため、以下のコード スニペットは疑似コードとして扱ってください。
var pred = CustomerFields.Id == 5;
new DataAccessAdapter.FetchEntityCollection(coll, new RelationPredicateBucket(pred));
これは大まかに次のように変換されます。
SELECT * FROM Customer WHERE Id = 5
PredicateExpression を使用して、いくつかの述語を組み合わせることができます。
var predEx = new PredicateExpression();
predEx.Add(CustomerFields.Id == 5);
predEx.AddWithOr(CustomerFields.Name == "X");
以下と同等です。
SELECT * FROM Customer WHERE Id = 5 OR Name = 'X'
関係: 関係は、データベース内の関係を表します。エンティティのすべての関係を含む、生成されたコード内のすべてのエンティティに関係プロパティがあります。たとえば、Order テーブルと 1 対多の関係を持つ Customer テーブルがある場合、対応するエンティティには、それらの関係を含む静的な Relations プロパティがあります。
CustomerEntity.Relations.OrderEntityUsingCustomerId; OrderEntity.Relations.CustomerEntityUsingCustomerId;
結合を実行し、結合に基づいて結果を返す場合は、これらの関係を使用します。たとえば、varlue が 50000 より大きい注文を持つすべての顧客を取得する場合は、次のようにします。
var pred = OrderFields.Value > 50000;
var rpb = new RelationPredicateBucket();
rpb.PredicateExpression.Add(pred);
rpb.Relations.Add(CustomerEntity.Relations.OrderEntityUsingCustomerId);//perform join
これは次のように変換されます。
SELECT C.* FROM Customer AS C JOIN Order AS O ON C.Id = O.CustomerId WHERE O.Value > 50000
複数の結合の場合、リレーションを追加するだけで、数量が 1 より大きい OrderDetail を持つ 50000 より大きい値の注文を持つ顧客を取得できます。
var pred = OrderFields.Value > 50000 & OrderDetailFields.Quantity > 1;
var rpb = new RelationPredicateBucket();
rpb.PredicateExpression.Add(pred);
rpb.Relations.Add(CustomerEntity.Relations.OrderEntityUsingCustomerId);//perform customer and order join
rpb.Relations.Add(OrderEntity.Relations.OrderDetailEntityUsingOrderId);//perform order and order detail join
次の SQL クエリが生成されます。
SELECT C.* FROM Customer AS C JOIN Order AS O ON C.Id = O.CustomerId JOIN OrderDetail AS OD ON OD.OrderId = O.Id WHERE O.Value > 50000 AND OD.Quantity > 1