5

LINQ to ADO.net Data Services クエリを実行するときに、Expand キーワードを使用する代わりの方法があるかどうか疑問に思っています。expand メソッドは目的のデータを取得しますが、使用するサブオブジェクトをすべて事前に把握しておく必要があります。私の絶対的な好みは、それらのサブオブジェクトにアクセスするときに遅延ロードされることですが、これはオプションではないようです (この遅延ロードを get on そのサブオブジェクト プロパティに追加することもできますが、データ サービス参照の更新を行うと消去されます)。

この状況に対する提案/ベストプラクティス/代替手段はありますか? ありがとう。

===== MailingAddress を持つ Member を使用したコード例 =====

作品:

var me = (from m in ctx.Member.Expand("MailingAddress")
          where m.MemberID == 10000
          select m).First();
MessageBox.Show(me.MailingAddress.Street);

優先します (これが行って MailingAddress をロードした場合は本当に好きです)

var me = (from m in ctx.Member
          where m.MemberID == 10000
          select m).First();
MessageBox.Show(me.MailingAddress.Street);

または、少なくとも (注: サービス操作で LINQ to Entities として実行すると、MailingAddressReference を使用してこれに似たものがサーバー側で機能します)

var me = (from m in ctx.Member
          where m.MemberID == 10000
          select m).First();
if (!(me.MailingAddress.IsLoaded())) me.MailingAddress.Load()
MessageBox.Show(me.MailingAddress.Street);
4

2 に答える 2

9

ADO.net Data Servicesを介したサブオブジェクトの読み込みには、次の2つの選択肢があるようです。

熱心な読み込み

LINQ to Data Servicesの例で.Expand( "[MemberVariableName]")によって実現

var me = (from m in ctx.Member.Expand("MailingAddress")          
         where m.MemberID == 10000          
         select m).First();
MessageBox.Show(me.MailingAddress.Street);

遅延読み込み

コンテキストで.LoadPropertyを呼び出し、遅延ロードする必要のある変数とプロパティを渡すことで実現します。

var me = (from m in ctx.Member          
          where m.MemberID == 10000          
          select m).First();
ctx.LoadProperty(myMember, "MailingAddresses");
MessageBox.Show(me.MailingAddress.Street);
于 2008-10-10T03:27:33.630 に答える
3

LINQ to Entities では、 Include メソッドも使用できます。宣言後、実行前にこれを適用できます。たとえば、次のようになります。

me = me.Include("MailingAddress");
于 2008-10-07T13:18:10.413 に答える