是否可以使用包含字段名称的字符串值?

时间:2017-11-14 14:15:32

标签: c# lambda csom

  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. 现在我只获取了从String中加载哪个属性的信息,所以我试过这样的事情:

    funcArray[0] = p => p.GetType().GetProperty("Name");
    funcArray[1] = p => p.GetType().GetProperty("Id");
    
  4. 这不起作用,我不太确定如果我做得对,或者甚至可以做到。

1 个答案:

答案 0 :(得分:0)

您可以传递一个以逗号分隔的字符串,并使用一些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();

你也可以使用方法&#34; GetByGuid&#34;而不是Linq Where。

相关问题