質問

LINQ to ADO.net Data Servicesクエリを実行するときに、Expandキーワードを使用する代替手段があるかどうか疑問に思っています。 expandメソッドを使用すると、関心のあるデータを取得できますが、事前に操作するサブオブジェクトをすべて知る必要があります。私の絶対的な好みは、それらのサブオブジェクトにアクセスすると、それらのサブオブジェクトが遅延ロードされることですが、これはオプションではないようです(この遅延ロードをそのサブオブジェクトプロパティの取得に追加できますが、データサービスリファレンスを更新すると消去されます)。

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

===== MailingAddressを持つメンバーを使用したサンプルコード=====

作品:

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);
役に立ちましたか?

解決

ADO.net Data Servicesを介したサブオブジェクトのロードには、2つの選択肢があるようです:

Eager Loading

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);

他のヒント

LINQ to Entitiesでは、 Includeメソッドも使用できます。 。これは、宣言された後、実行される前に適用できます。例:

me = me.Include("MailingAddress");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top