2016-07-26 8 views
0

SharePoint CSOMはどのようにこのコードブロックを処理しますか?SharePoint CSOM C#Where句でのクエリの読み込みパフォーマンス

FileCollection allDocs = libFolder.Files; 
clientContext.Load(allDocs, files => files.Where(file => file.Name == "test.docx"); 
clientContext.ExecuteQuery(); 

if (allDocs.Count > 0) 
{ 
    File currentDoc = allDocs[0]; 
    // continue 
} 

"allDocs"コレクションは完全に列挙されていますか、またはLoadパラメータのWhere句は1つのファイルを特定していますか?

また、「allDocs [0]」というインデックス付きコレクションの選択をせずにCSOMのファイル名でファイルを取得する方が良い方法があります。 どうやったらいいですか?

答えて

1

以下のコードを使用している場合には、1つのファイルを特定する必要があります。

FileCollection allDocs = libFolder.Files.Where(file => file.Name == "test.docx"); 
clientContext.LoadQuery(allDocs); // IQueryable 
clientContext.ExecuteQuery(); 
// it should query on server and return only requested items without enumerating 
// whole library 
// i think your code does the same, but im not sure here 
// i personally prefer using syntax above 
// note that im using LoadQuery, but not Load method 

// you can select a single item like this without awkward allDocs[0] syntax 
var singleDoc = allDocs.SingleOrDefault(); 
if (singleDoc != null) { 
    // do something 
} 

をあなたがそれを行うだろうか?

おそらくCAMLクエリです。

0

のMicrosoft®SharePoint®のServer 2010には、あなたが SharePointリストに対するエンティティへのLINQのフレームワークとLINQの テイク有利にSharePointにLINQを使用することができます。 LINQフレームワークはLINQをSharePoint ステートメントに変換して、共同アプリケーションマークアップ言語(CAML)に変換し、 はSharePointオブジェクトモデルまたはWeb サービスに対してCAMLを実行します。 Source: MSDN

リンクされたページでは、LINQのツーのSharepointによって生成されるCAMLを表示するcontext.Logプロパティにテキストライターを追加する方法を示すことになります。

コードでは、LinqがIQueryableに変換され、ロード関数に渡され、CAMLに変換されます。 executeQueryは、格納されているすべてのIQueryable式を実行し、allDocsなどの変数に結果を設定します。これは通常のLinqの遅延実行です。

.Where(...)の代わりに.Single(...)メソッドを使用する場合、Linqはクエリを即座に実行し、loadメソッドのIQueryableではなく単一の項目を返します期待している。

質問が実行された後、.Single()、.SingleOrDefault()、.First()、.FirstOrDefault()などの標準のLinqメソッドを使用して、結果から項目を削除します。

関連する問題