2009-04-27 9 views
0

次のデータを取得するためにデータベース呼び出しを1つ作成したいと思いますが、LINQの外観を把握していません。ADO.NETエンティティで1つのデータベースヒットのレコードとすべての子レコードを取得するにはどうすればよいですか?

  • すべての写真を、特定のフォトギャラリーから:
      あなたは、私が取得する上で見ることができるように

      var photos = from photo in entitiesContext.Photo 
            join pg in entitiesContext.PhotoGallery on photo.PhotoGallery.PhotoGalleryID equals pg.PhotoGalleryID 
            where pg.PhotoGallery == photoGalleryID 
            select photo; 
      
      var photoList = photos.ToList(); 
      
      foreach (var photoForLoading in photoList) 
      { 
          photoForLoading.UserReference.Load(); 
          photoForLoading.PhotoComments.Load(); 
      
          foreach (var comment in photoForLoading.PhotoComment) 
          { 
           comment.UserReference.Load(); 
          } 
      } 
      
      return photoList; 
      

      :ここに私の現在の実装(私はそれが悪いことを知っている!)ですそれぞれの写真に

    • ユーザの詳細各写真
      • 日に
      • コメント各コメント

私はADO.NETエンティティフレームワークとLINQでこれをどのように行うのですか上のEのユーザの詳細?

乾杯、 灰。

答えて

6

.Includeメソッドを使用して、関連するエンティティを読み込みます。例えば:あなたのObjectQueryを作成する場合は、はあなたが自動的にロードするサブエンティティの名前を渡し、方法を含め

from photo in entitiesContext.Photo 
          .Include("UserReference") 
          .Include("PhotoComments") 
etc... 
+0

これは、SQLサーバーに送信された1つのSQLステートメント(いくつかの内部結合を含む)が発生すると想定していますか?また、写真にコメントが含まれていない場合は、左外部結合のいくつかの形式を行う必要がありますか? – Ash

+0

いいえコメントがある場合は値を、コメントがない場合はNULLを取得します。ヌルが十分であることを確認してください。 – mhenrixon

1

呼び出します。ロードする複数の下位項目がある場合、呼び出しを連鎖にチェーンすることができます。

詳細については、articleを参照してください。

関連する問題