Я использую CSOM .NET для загрузки объектов задач из Project Server 2013, и мне нужно
- фильтровать задачи так, чтобы возвращалась только их часть, и
- загружать только подмножество столбцов задачи, указанное пользователем во время выполнения.
Я нашел этот сообщение, в котором показано, как загрузить динамический набор столбцов. , и это прекрасно работает для моего второго требования. Однако я не могу найти работающий синтаксис LINQ для объединения оба выбора столбца и фильтрации строк.
В приведенном ниже примере мне нужно загрузить только те «строки» для сводных задач (где t.IsSummary равно true), и я хочу загрузить только Столбцы имени, Начало и Конец.
Следующий код из упомянутого поста загружает только три нужных мне столбца:
foreach (string fieldName in new List<string>(){"Name","Start","Finish"});
{
ctx.Load(ctx.Tasks,c => c.Include(t => t[fieldName]));
}
ctx.ExecuteQuery();
Но когда я пытаюсь объединить where() и include() в единственном синтаксисе, который имеет для меня смысл, я получаю InvalidQueryExpressionException на второй итерации. через цикл foreach: «Выражение запроса не поддерживается».
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 для CSOM должен быть синтаксис, отвечающий обоим требованиям. Каков правильный синтаксис для выполнения этого типа запроса?