2

私はテーブルを持っています。それをウィジェットと呼びましょう。(とりわけ)person1idとperson2idがあります。(はい、NNリレーションテーブルを設定する必要があると思いますが、これまでのところ、1つのウィジェットに2人を超える人がいることはありません。)

Person1Id(およびもちろんperson2id)はpersonテーブルにリンクされており、yesはPersonDetailテーブルへの別のリンクです。

2人と2人の詳細を持つウィジェットのリストをクエリし、persondetailフィールドでフィルタリングするにはどうすればよいですか?ウィジェットにpersonidが1つしかない場合は、次のようにします。

RelationCollection relationsToUse = new RelationCollection();
relationsToUse.Add(WidgetEntity.Relations.PersonEntityUsingPerson1Id);
relationsToUse.Add(PersonEntity.Relations.PersonDetailsEntityUsingDetailId);
PredicateExpression filter = new PredicateExpression(new FieldCompareValuePredicate(PersonDetailsFields.ModifiedDate, ComparisonOperator.GreaterEqual, startdate)); //whatever
var list = new WidgetCollection();
list.GetMulti(filter, relationsToUse);

では、どうすれば2番目の関係を取得できますか?relationsToUse.Add(WidgetEntity.Relations.PersonEntityUsingPerson2Id);

.net3.5でLLBLgen2.6を使用しています。私はここで関連する質問を見ましたが、それは同じではありません。

4

1 に答える 1

4

追加するリレーションごとにエイリアスを指定する必要があります。正しく覚えていれば、LLBLGenドキュメントファイルにこれについて説明しているものがあります。

これはLLBLGen2.6のドキュメントから引用したもので、「高度なフィルタリング」については、同じテーブルに2回結合し、エイリアスを使用してフィルターを制御する方法を確認できます。

...解決策は、RelationCollectionに追加されたリレーション内のエンティティにエイリアスを設定し、述語で同じエイリアスを使用することです。エイリアスを省略した場合、エイリアスされていないと見なされ、同じRelationCollectionに以前に追加されたリレーションのエンティティにエイリアスを設定した場合、結合リスト内の別のエンティティと見なされます。したがって、最初のリレーションでCustomerを「C」にエイリアスし、2番目のリレーションでCustomerのエイリアスを指定しない場合、参加リストでCustomerエンティティの2倍を取得します。したがって、エイリアスの使用には注意が必要です。

Customerと2つのCity述語を持つ2つのAddressエンティティの例では、次のコードになります。述語でのエイリアスの使用にも注意してください。

// C#
IRelationPredicateBucket bucket = new RelationPredicateBucket();
bucket.Relations.Add(CustomerEntity.Relations.AddressEntityUsingVisitingAddressID, "VisitingAddress");
bucket.Relations.Add(CustomerEntity.Relations.AddressEntityUsingBillingAddressID, "BillingAddress");
bucket.PredicateExpression.Add((AddressFields.City.SetObjectAlias("VisitingAddress")=="Amsterdam") &
     (AddressFields.City.SetObjectAlias("BillingAddress")=="Rotterdam"));
EntityCollection customers = new EntityCollection(new CustomerEntityFactory());
DataAccessAdapter adapter = new DataAccessAdapter();
adapter.FetchEntityCollection(customers, bucket);
于 2010-11-24T09:58:45.867 に答える