2010-12-30 6 views
3

私はLinqを使用してSQLにオブジェクトを設定しています。以前は、遅延ロードを使用していましたが、強制的にロードするために子オブジェクトにアクセスするリストを反復処理していました。これは私が持っている大きなデータセットでは非常に良い解決策ではありません。私は今、私のデータコンテキストにLoadOptionsを設定して、最初はそれをすべて取得します。子オブジェクトからロードオプションにプロパティを設定する

私が遭遇した1つの問題は、リストの各繰り返しで1つのプロパティを手動で読み込む前で、これを現在どのように達成するのかがわかりません。単なる文字列値です。私のデータコンテキストで

info.CreatedByName = info.CreatedBy.Name; 

、私のような私のロード・オプションを指定しています:

DataLoadOptions loadOptions = new DataLoadOptions(); 
loadOptions.LoadWith<Info>(info => info.Owner); 
loadOptions.LoadWith<Info>(info => info.CreatedBy); 

は私のロード・オプションでこのプロパティの割り当てを指定する方法はありますか?ような何か:

loadOptions.LoadWith<Info>(info => info.CreatedByName) 
+0

CreatedByNameはどこに定義されていますか? – SteadyEddi

+0

CreatedByNameはInfoの部分クラスで定義されています – earthling

答えて

1

このようにLoadOptionsを使用することはできません。オブジェクトトラッキングを実行する必要がない場合は、投影コンテナクラスを使用し、構築時にプロパティを明示的に設定することができます。

from info in context.Infos 
select new InfoContainer 
{ 
    CreatedByName = CreatedBy.Name 
} 

あなたは情報のための部分的なクラスを追加し、その人口がいない場合は、それをCREATEDBYがロードされていることを前提とし、または遅延読み込みますCreatedBy.Name

public string CreatedByName 
{ 
    get 
    { 
     return CreatedBy.Name; 
    } 
} 

を参照するプロパティを追加することができます。

+0

ここでは自動プロパティを使用していたので、CreatedByName = CreatedBy.NameをOnLoaded()イベントに設定しました。 – earthling

1

あなたが行うすべては完全に有効である、まだ明示的コンテキストのLoadWithオプションを設定した後、あなたのクエリにCREATEDBYを選択する必要があり、例えば

var result = from info in context.Infos 
      join user in context.Users on info.CreatedById equals user.Id 
      select info; 

私は同じ問題を持っていた、this solutionをチェック

関連する問題