CSOM .NET を使用して Project Server 2013 からタスク オブジェクトを読み込みます。
- タスクをフィルタリングして、それらのサブセットのみが返されるようにします。
- ユーザーが実行時に指定したタスク列のサブセットのみをロードします。
列の動的セットをロードする方法を示すこの投稿を見つけました。これは、私の 2 番目の要件にうまく機能します。ただし、列の選択と行のフィルタリングの両方を組み合わせる実行可能な LINQ 構文がわかりません。
以下の例では、サマリー タスク ( t.IsSummaryがtrue ) の「行」のみを読み込む必要があり、Name、Start、およびFinish列のみを読み込みます。
参照された投稿の次のコードは、必要な 3 つの列だけを読み込みます。
foreach (string fieldName in new List<string>(){"Name","Start","Finish"});
{
ctx.Load(ctx.Tasks,c => c.Include(t => t[fieldName]));
}
ctx.ExecuteQuery();
しかし、私にとって意味のある唯一の構文でwhere()とinclude( ) を結合しようとすると、foreach ループの 2 回目の反復でInvalidQueryExpressionExceptionが発生します:「クエリ式はサポートされていません。」
foreach (string fieldName in new List<string>(){"Name","Start","Finish"});
{
ctx.Load(ctx.Tasks,
c => c.Where(t => t.IsSummary),
c => c.Include(t => t[fieldName])
);
}
ctx.ExecuteQuery();
where句とinclude句の順序を逆にすると、同じエラーが発生します。フィールド名のループの外側でwhere句をプルして別のLoad呼び出しにすると、サマリー タスクの行フィルタリングは機能しますが、タスク フィールドの動的な選択が失われます。LINQ for CSOM には、両方の要件を満たす構文が必要です。このタイプのクエリを実行するための正しい構文は何ですか?