Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以将Include与字段名的字符串值一起使用?_C#_Lambda_Csom - Fatal编程技术网

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

C# 是否可以将Include与字段名的字符串值一起使用?,c#,lambda,csom,C#,Lambda,Csom,我想使用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

我想使用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();
    

  • 这是行不通的,我也不确定我是否做得对,或者是否有可能做到这一点。

    您可以传递逗号分隔的字符串,然后使用一些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,其中有一个接受字符串的
    Include
    重载。如果已经将属性名作为字符串,则可以使用该属性。对于您的代码,我在第3行中得到错误
    …q.Include(p).
    p:无法从'string'转换为'System.Linq.Expressions.Expression'我是否需要包含一些内容才能使用
    Include()中的重载?
    ?它只显示了将包含与数组一起使用的选项。您使用的是哪个版本的实体框架?Core还是6?尝试在文档中添加:“使用System.Linq.Expressions;”我不知道。我在VisualStudio中查看了项目属性,找到的关于框架的唯一信息是:应用程序>目标框架:.NETFramework 4.5。这就是你的意思吗?我应该把它改成4.6吗?我已经在使用“using System.Linq.Expressions;”@socramm再次更新。我相信它现在会起作用。
    var includeFields = "Name,Id";
    
    var proj = ctx.Projects.GetByGuid(projGuid);
    
    foreach (var fieldName in includeFields.Split(','))
    {
        ctx.Load(proj, includes => includes[fieldName]);
    }
    
    ctx.ExecuteQuery();