是否可以将 Include 与字段名称的字符串值一起使用?

Is it possible to use Include with a string value of the field name?

  1. 我想使用 CSOM 加载 SharePoint Project Server 项目

    var proj = ctx.LoadQuery(ctx.Projects
            .Where(p => p.Id == projGuid)
            .Include(p => p.Id, p => p.Name));
    
    ctx.ExecuteQuery();
    
  2. 我需要 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();
    
  3. 现在我只得到 属性 必须从字符串中加载的信息,所以我尝试了这样的事情:

    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。