是否可以将 Include 与字段名称的字符串值一起使用?
Is it possible to use Include with a string value of the field name?
我想使用 CSOM 加载 SharePoint Project Server 项目
var proj = ctx.LoadQuery(ctx.Projects
.Where(p => p.Id == projGuid)
.Include(p => p.Id, p => p.Name));
ctx.ExecuteQuery();
我需要 Include()
是动态的,所以我这样做了:
Expression<Func<PublishedTask, object>>[] funcArray
= new Expression<Func<PublishedTask, object>>[2];
funcArray[0] = p => p.Name;
funcArray[1] = p => p.Id;
var proj = ctx.LoadQuery(ctx.Projects
.Where(p => p.Id == projGuid)
.Include(funcArray));
ctx.ExecuteQuery();
现在我只得到 属性 必须从字符串中加载的信息,所以我尝试了这样的事情:
funcArray[0] = p => p.GetType().GetProperty("Name");
funcArray[1] = p => p.GetType().GetProperty("Id");
那行不通,我不太确定我是否做对了,或者是否有可能做到。
您可以传递逗号分隔的字符串并使用一些 Linq 将它们拆分并将每个函数包含在查询中,而不是传递函数数组:
var includeFields = "Name,Id";
var proj = ctx.Projects.GetByGuid(projGuid);
foreach (var fieldName in includeFields.Split(','))
{
ctx.Load(proj, includes => includes[fieldName]);
}
ctx.ExecuteQuery();
您也可以使用方法 "GetByGuid" 而不是 Linq Where。
我想使用 CSOM 加载 SharePoint Project Server 项目
var proj = ctx.LoadQuery(ctx.Projects .Where(p => p.Id == projGuid) .Include(p => p.Id, p => p.Name)); ctx.ExecuteQuery();
我需要
Include()
是动态的,所以我这样做了:Expression<Func<PublishedTask, object>>[] funcArray = new Expression<Func<PublishedTask, object>>[2]; funcArray[0] = p => p.Name; funcArray[1] = p => p.Id; var proj = ctx.LoadQuery(ctx.Projects .Where(p => p.Id == projGuid) .Include(funcArray)); ctx.ExecuteQuery();
现在我只得到 属性 必须从字符串中加载的信息,所以我尝试了这样的事情:
funcArray[0] = p => p.GetType().GetProperty("Name"); funcArray[1] = p => p.GetType().GetProperty("Id");
那行不通,我不太确定我是否做对了,或者是否有可能做到。
您可以传递逗号分隔的字符串并使用一些 Linq 将它们拆分并将每个函数包含在查询中,而不是传递函数数组:
var includeFields = "Name,Id";
var proj = ctx.Projects.GetByGuid(projGuid);
foreach (var fieldName in includeFields.Split(','))
{
ctx.Load(proj, includes => includes[fieldName]);
}
ctx.ExecuteQuery();
您也可以使用方法 "GetByGuid" 而不是 Linq Where。