2016-09-23 10 views
0

を作成します。私は次のように、このリストのフィールドをロードしようとしていますSharePointの、上のリストを持って、再利用可能なLINQ式

 var lists = context.Web.Lists; 
     context.Load(lists, n => n.Include(x => x.Title, 
              x => x.Fields.Include(
               z => z.Title, 
               z => z.InternalName, 
               z => z.TypeDisplayName))); 
     context.ExecuteQuery(); 

仕事をしながら私は、私のコードではかなり頻繁に使用するコードの次の部分他のリストと:

      x => x.Fields.Include(
               z => z.Title, 
               z => z.InternalName, 
               z => z.TypeDisplayName) 
私は私のコードでこの .Include文を挿入簡素化する(場合には、私は将来的にはより多くのプロパティを追加する必要がありますように、どのような方法があるかどうかを知りたい

、私は持っていけませんどこにでも私のコードをすべて書き直すことができますが、1つの場所でのみ)。

カスタムLINQエクステンションを作成しようとしましたが、恐らくExpression<Func<T,Y>>(おそらく)のようなものが予想されます。

この問題に関するお手伝いは、高く評価されます。

+0

'Fields'型宣言を追加できますか? – Groo

+2

ここをクリックしてください:http://stackoverflow.com/a/3365972/6741868 –

+0

これらの答えはすぐに式を評価していますが、この場合は 'context.ExecuteQuery() 'を呼び出すまでは' lists'の下に何もありません。 'afterwadsだけで全てのオブジェクトをロードするところです –

答えて

1

Load方法はExpression<Func<T, object>>を期待し、listsはあなたのようなものを使用することができますおそらくIQueryable<Something>ですので:式ツリーの新しいインスタンスを作成する必要があります機能を評価する

public static Expression<Func<IQueryable<Something>, Object>> IncludeCommonFields() 
{ 
    // since the method returns an Expression, this will actually 
    // get compiled to an expression tree 
    return input => input.Fields.Include(z => z.Title, 
             z => z.InternalName, 
             z => z.TypeDisplayName); 
} 

を:

var lists = context.Web.Lists; 
context.Load(lists, n => n.Include(x => x.Title, 
            IncludeCommonFields()); 
context.ExecuteQuery(); 

頻繁に呼び出される場合は、一度だけインスタンス化することもできます。

static readonly Expression<Func<IQueryable<Something>, Object>> _commonIncludes 
    = input => input.Fields.Include(z => z.Title, 
             z => z.InternalName, 
             z => z.TypeDisplayName); 

context.Load(lists, n => n.Include(x => x.Title, 
            _commonIncludes); 
+0

免責事項:EF 4.1を使用したことがないので、' Include'シグネチャについてはわかりません、 'IQueryable '(https://msdn.microsoft。 com/ja-us/library/gg671236(v = v103).aspx)。 – Groo

+0

私はすでにこれをやろうとしましたが、 'context.ExecuteQuery()'を呼び出すとすぐに式を評価するのではなく、すぐに式を評価しようとするので失敗します。 –

+0

@RobertJ:それは変です。メソッドを使用しましたか?戻り値の型は 'IQueryable 'なので、現時点で何も評価する必要はありません。 – Groo

関連する問題