【发布时间】:2017-12-20 10:30:10
【问题描述】:
简而言之,我想要完成的是使用 CSOM 从 SharePoint Project Server 中的项目加载任务。
var projects = ctx.LoadQuery(ctx.Projects
.Where(p => p.Id == projGuid)
.Include(
p => p.Id, p => p.Name,
p => p.Tasks
.Where(t => t.Id == taskGuid)
.Include(t => t.Name))
);
ctx.ExecuteQuery();
我的问题在于这部分.Where(t => t.Id == taskGuid)。如果我只想加载 1 个任务,它应该如何工作,但如果我想加载多个任务,它将无法工作。当然可以这样写.Where(t => t.Id == taskGuid1 || t.Id == taskGuid2 || ... )
但这不会是动态的。
我尝试的是使用数组和数组GuidArray.Contains(p.Id)的外观
但是,如果我尝试在 Where() 表达式中使用 .Contains(),则会出现错误。
ClientRequestException: 'Contains' 成员不能在表达式中使用。
所以我在想是否可以根据我要加载的任务数量以某种方式创建 lambda 表达式。
【问题讨论】:
-
你可以使用 FirstOrDefault() 并检查不为空吗?或者你可以使用 Any() 吗?
-
这取决于你的数据库的性能有多好,但如果它很快,你可以用 ID 构建一个数组并循环遍历它。