@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

LINQ to SQL での ToList について

1
投稿者投稿内容
araki
会議室デビュー日: 2008/12/08
投稿数: 2
投稿日時: 2008-12-08 16:31
LINQ to SQL を勉強中です。


Using ステートメントを利用してDataContextにアクセスし、
Using ステートメント外へ取得したデータを持ち出したいので、
ToListメソッドを使っています。

持ち出したいデータは

OrderHeader に対して OrderDetail が一対多で関連付けされています。

OrderHeader ( 親Table )
- OrderNo
- OrderDate
OrderDetail ( 子Table )
- OrderSubNo
- ProductCode
- Qty

Using dc As New dcXXXDataContext

Dim r = From p In dc.OrderHeader Where p.OrderNo = "0001"

Return r.ToList()

End Using

この時、OrderHeaderはList(Of OrderHeader)でReturnされるのですが、
OrderHeader.OrderDetailについては、なにもしていないのでToListされず、
DataContextともアクセスできないのでOrderDetailプロパティは破棄されたと表示されます。

せっかく、LINQ to SQLでリレーションされたOrderDetailを自動的に取得してくれているので、
これを、OrderDetailも含め関連付けを維持した状態で、ToListできるような何かいい方法はありませんでしょうか。

otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2008-12-08 21:41
EntitySetジェネリッククラスによる遅延読み込みが有効になっているからです。
DataLoadOptionsのLoadWithメソッドを使ってください。

http://msdn.microsoft.com/ja-jp/library/system.data.linq.dataloadoptions.loadwith.aspx

#DataContext→DataLoadOptionsに修正

[ メッセージ編集済み 編集者: otf 編集日時 2008-12-09 11:13 ]
araki
会議室デビュー日: 2008/12/08
投稿数: 2
投稿日時: 2008-12-09 08:55
返信ありがとうございます。

返信頂いた内容にて、まさに実現したいことが達成できました。

今回の質問では子がひとつですが、複数の場合も同様に取得できました。


参考書やネットにて数日調べたのですが、
このようなクラスに辿り着けず、困っていました。

時間がある時に一度落ち着いて、
目的なくMSDNにも一通り目を通してみようかと思います。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)