2009-05-27 8 views
1

追加情報を取得するためにエンティティモデルにクエリを実行する際に問題があります。エンティティフレームワークIQueryable

My dbには、イベントテーブルと1対多のリレーションを持つプログラムテーブルがあります。エンティティモデルは関係をうまく生成しますが、モデルにクエリを実行してイベントでprogamオブジェクトを取得する方法がわかりません。

私はこれを行うことができますが

var foo = from program in entities.ProgramSet 
      where program.StartDate > DateTime.now 
      orderby program.StartDate 
      select program; 

問題はありませんが。 Microsoftのページ(Entityフレームワークによるクエリのシェーピング)で見つかったもの:msdn.microsoft.com/en-us/library/bb896272.aspx、子オブジェクトを取得する場合は、次のようにします。

// Define a LINQ query with a path that returns 
// orders and items for a contact. 
var contacts = (from contact in context.Contact 
      .Include("SalesOrderHeader.SalesOrderDetail") 
      select contact).FirstOrDefault(); 

ただし、クエリで見つけることができるインクルードまたはインクルードはありません。

提案がありますか?私は結果を渡ってforeachを実行してから、.Events.Load()を実行することができますが、SQLを実行するためにIQueriable結果を強制しません。 )などが呼ばれていますか?私はそれはまた、イベントデータを含める持ちたいFindUpComingProgramsで

public class ProgramRepository : CT.Models.IProgramRepository 
{ 
    CTEntities db = new CTEntities(); 

    public IQueryable<Program> FindAllPrograms() 
    { 

     return db.ProgramSet; 
    } 
    public IQueryable<Program> FindUpcomingPrograms() 
    { 

     var programs = from program in FindAllPrograms() 

       where program.StartDate > DateTime.Now 
       orderby program.StartDate         
       select program; 
     return programs; 


    } 

:ここ

は私のプロジェクトからいくつかのサンプルコードです。プログラムとイベントモデルの間には関係があります。プログラムにリスト <イベント >があります。これは、IQueryableメソッドを使用して返したいものです。

もう一度おねがいします!

+0

はEFで動作しませんでしたが、FirstOrDefault()を呼び出しても問合せは実行されます。 – CSharpAtl

+0

はい、それは、MicrosoftのWebサイトからのFirstOrDefault()のサンプルを回避したいと思います。 – Mike

答えて

2

含める機能は、私はあなたがこのような何かを見て再書き込みをクエリする必要があるとしていると思う...

のObjectQueryオブジェクトの一部です。ここでArticleある

var contacts = context.Contact.Include("SalesOrderHeader.SalesOrderDetail").FirstOrDefault(); 

//Not sure on your dot path you might have to debug that a bit 

それはいくつかの例を持っています...

+0

私が探しているのは、オブジェクトが関連クラスのリストのプロパティを埋めるように、Entityフレームワークのコンテキストで、Setをクエリして関連する子を取得する方法です。そして、これをIQueriable として返す方法でこれを行いますか? ありがとう – Mike

+0

また、CreateSourceQuery()を使用して必要な参照データを取得したり、MicrosoftのWebサイトにアクセスしたりできます。http://code.msdn.microsoft.com/EFLazyLoading and install LazyLoadingを使用して、Program.Eventsにアクセスすると、直ちにイベントをロードすることができます。 – Mike