0

CSOM .NET を使用して Project Server 2013 からタスク オブジェクトを読み込みます。

  • タスクをフィルタリングして、それらのサブセットのみが返されるようにします。
  • ユーザーが実行時に指定したタスク列のサブセットのみをロードします。

列の動的セットをロードする方法を示すこの投稿を見つけました。これは、私の 2 番目の要件にうまく機能します。ただし、列の選択と行のフィルタリングの両方を組み合わせる実行可能な LINQ 構文がわかりません。

以下の例では、サマリー タスク ( t.IsSummarytrue ) の「行」のみを読み込む必要があり、NameStart、および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 には、両方の要件を満たす構文が必要です。このタイプのクエリを実行するための正しい構文は何ですか?

4

2 に答える 2