2011-06-19 21 views
1

次のコードを使用して、単一のエンティティのデータを取得します。Silverlightでエンティティを使用してLINQを結合する場合

LoadOperation<TimeForm> loadoperation = _cc.Load(_cc.GetTimeFormsQuery() 
      .Where(o => o.Start>= weekrange.startdate 
        && o.End<= weekrange.enddate 
        && o.USERID== "TEST")); 

私はこのタイムフォームテーブルに接続する3つのテーブルを持っているしかし、SQLで私のクエリは次のようになります。

SELECT T* FROM TimeForm 
INNER JOIN CLIENT ON TimeForm.CODEID= CLIENT.CODEID 
INNER JOIN RATE ON TimeForm.RATEID= RATE.RATEID 
INNER JOIN TASK ON TimeForm.TASKID = TASK.TASKID 

どのようにこれは、上記の構文で可能になることができますか?私はこれらのテーブルからいくつかの値が必要です。

答えて

0

このような何か試してみてください:

var query = context.TimeForm. 
      Join(context.CLIENT, 
      t => t.CODEID, c => c.CODEID , 
      (t, c) => new 
      { 
       PropertyA = t.ColumnA, 
       PropertyB = c.ColumnB      
      }).Join(context.RATE, 
        b => b.RATEID, r => r.RATEID, 
        (b, r) => new 
        { 
         PropertyC = b.ColumnC, 
         PropertyD = r.ColumnD        
        }).Join(context.TASK, 
          x => x.TASKID, t => t.TASKID, 
          (x,t) => new 
          { 
           PropertyE = x.ColumnE, 
           PropertyF = t.ColumnF 
          }); 

PropertyA、B、などを使用すると、データがクエリから返さ格納するのに使用タイプに存在するプロパティだけ、です。一方、ColumnA、Bなどは、結合に関与する表に存在する列です。クエリでは、これらの値を実際の値に置き換えることができます。

0

ドメインサービスファイル(GetTimeFormsQuery()が定義されている場所)に移動する必要があります。それはのようなものを見てみましょう:

public IQueryable<TimeForm> GetTimeForms() { 
    return this.Context.TimeForm; 
} 

、それはこのようなものですので、それに追加します。

public IQueryable<TimeForm> GetTimeForms() { 
    return this.Context.TimeForm 
     .Include("Client") // Assuming your property to see the client is called "Client" 
     .Include("Rate") // Same for "Rate" 
     .Include("Task"); // and "Task 
} 

または任意のナビゲーションプロパティは、あなたのTimeFromエンティティに呼ばれています。

Silverlightは遅延読み込みを行いません。したがって、これらのプロパティをドメインサービスのクエリに明示的に含める必要があります。また、毎回電卓でテーブル全体をプルしないように、開始日と終了日とユーザーIDを受け入れるドメインサービスに余分なメソッドを作成することをお勧めします。

public IQueryable<TimeForm> GetTimeFormsWithStartAndEnd(DateTime start, DateTime end, string userId) { 
    return this.Context.TimeForm 
     .Include("Client") // Assuming your property to see the client is called "Client" 
     .Include("Rate") // Same for "Rate" 
     .Include("Task") // and "Task 
     .Where(o => o.Start>= start 
       && o.End<= end 
       && o.USERID== userId)); 

} 

あなたのWebプロジェクトを再構築した後、あなたはパラメータとしてこれら3を使用してSilverlightのGetTimeFormsWithStartAndEndQueryと呼ばれる方法があるでしょう。

Goodluck!